2009-10-07 21 views
5

Zapytałem o numer Parsing HTML String with jQuery, w jaki sposób mogę użyć jQuery na html. To wszystko działa, ale kiedy zastosuję to do ajaxa - to nie działa. Oto kod.Parsowanie łańcucha HTML za pomocą Ajax/jQuery

<script> 
    var url = 'moo.html'; 

    $.ajax({ 
    url: url, 
    success: function (code) 
    { 
     html = $(code); 
     html.each(function() { 
     alert($(this).html()); 
     }); 
    } 
    }); 
</script> 

moo.html zawiera

<div id='test'>zebra</div> 
<div id='foo'>bar</div> 

Jak mogę uzyskać zebra i bar?

Odpowiedz

14

myślę newlines w moo.html mogą być potknięcia ciebie.

Wszelkie nowe linie w twoim html zostaną przetworzone przez jQuery i przechowywane jako elementy węzła tekstowego "\n". W wyniku tego $(code).each przestanie wykonywać iterację po trafieniu pierwszego z tych węzłów i wywołasz na nim .html() (html() nie działa na typach węzłów innych niż Elementy).

Co potrzebne jest, aby złapać tylko div s w HTML:

var divs = $(code).filter(function(){ return $(this).is('div') }); 
divs.each(function() { 
    alert($(this).html()) 
}) 
+0

To było dokładnie to, co było! Dzięki! –

+0

Bah, Scott. Zobacz moją edycję dla obejścia problemu, aby nie usuwać wszystkich znaków nowej linii z twojego html :) –

+0

Chciałem użyć filtra lub przycinania, ale dzięki za opublikowanie tego kodu. –

0

try $ ('div', kod) .each zamiast .. jak tak ...

$('div', code).each(function() { 
    alert($(this).text()); 
}); 

nie testowałem go jednak ...

0

Spróbuj:

html = $("div", code); 
html.each(function() { 
    alert($(this).html()); 
}); 

Powodem, dla którego nie możesz tego zrobić tak, jak to masz, jest to, że podczas analizowania HTML jQuery chce mieć pojedynczy element główny. Jeśli nie, musisz to zrobić tak, jak powyżej. Poniższy HTML/JS będzie również pracować:

var html = $(code); 
html.children().each(....); 

<div> 
    <div id='test'>zebra</div> 
    <div id='foo'>bar</div> 
</div> 
+1

jQuery nie potrzebuje pojedynczy element główny podczas analizowania html. Na przykład 'alert ($ ('

'). Length)' daje "2". –

+1

Ale myślę, że .each tego wymaga i to jest to, co myślę, że miał na myśli :) –

+0

Żaden z tych przykładów nie działa. Czy muszę przywrócić dane w postaci ciągu? –

Powiązane problemy