2009-10-07 12 views
5

Ich fragte um Parsing HTML String with jQuery, wie ich jQuery auf eine HTML-Zeichenfolge verwenden kann. Das alles funktioniert, aber wenn ich es auf Ajax anwende - es funktioniert nicht. Hier ist der Code.Parsing HTML String mit Ajax/jQuery

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

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

moo.html enthält

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

Wie kann ich Zebra und Bar bekommen?

Antwort

14

Ich denke, Zeilenumbrüche in moo.html können Sie am stolpern.

Alle Zeilenumbrüche in Ihrem HTML werden am Ende von jQuery analysiert und als Textknotenelemente "\n" beibehalten. Als Ergebnis $(code).each stoppt die Iteration, wenn der erste dieser Knoten getroffen wird und Sie .html() darauf aufrufen (html() funktioniert nicht auf Nicht-Element-Knoten-Typen).

Was Sie brauchen, ist nur die div s in Ihrem HTML zu greifen:

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

Das ist genau was es war! Vielen Dank! –

+0

Bah, Scott. Sehen Sie meine Bearbeitung für eine Problemumgehung, damit Sie nicht gehen alle Zeilenumbrüche von Ihrem HTML entfernen :) –

+0

Ich wollte Filter verwenden oder trimmen, aber danke für die Veröffentlichung dieses Codes. –

0

try $ ('div', Code) .each statt .. wie so ...

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

Ich habe es allerdings nicht ...

0

Versuchen getestet:

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

Der Grund, warum Sie es nicht so machen können, wie Sie es haben, ist, weil beim Parsen von HTML jQuery ein einzelnes Wurzelelement haben will. Wenn dies nicht der Fall ist, müssen Sie es wie oben beschrieben tun. Die folgende HTML/JS würde auch funktionieren:

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

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

jQuery nicht ein einziges Wurzelelement benötigt, wenn die HTML-Analyse. Zum Beispiel gibt 'alert ($ ('

') .length) 'results in" 2 ". –

+1

Aber ich denke .Each erfordert es und das ist, was ich denke, er meinte :) –

+0

Keines dieser Beispiele funktioniert. Muss ich die Daten als String zurückgeben? –