2009-10-07 22 views
5

Le pregunté al Parsing HTML String with jQuery cómo puedo usar jQuery en una cadena html. Todo funciona, pero cuando lo aplico a ajax, no funciona. Aquí está el código.Análisis de cadena HTML con Ajax/jQuery

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

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

moo.html contiene

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

¿Cómo puedo obtener la cebra y el bar?

Respuesta

14

creo nuevas líneas en moo.html lo estén tropezar.

Cualquier nueva línea en su html terminará siendo analizada por jQuery y guardada como elementos de nodo de texto "\n". Como resultado, $(code).each dejará de iterar cuando se golpee el primero de estos nodos y usted llama al .html() (html() no funciona en tipos de no-Element).

Lo que necesita es sólo para agarrar los div s en su html:

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

¡Eso es EXACTAMENTE de lo que se trataba! ¡Gracias! –

+0

Bah, scott. Vea mi edición para una solución alternativa para que no vaya a eliminar todas las líneas nuevas de su html :) –

+0

Iba a utilizar el filtro o recorte, pero gracias por publicar ese código. –

0

intento $ ('div', código) .Cada vez .. así ...

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

Yo no lo he probado, aunque ...

0

Probar:

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

La razón por la que no puede hacerlo de la forma en que la tiene, es porque al analizar HTML jQuery quiere tener un único elemento raíz. Si no es así, tienes que hacerlo de la manera anterior. La siguiente HTML/JS también funcionaría:

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

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

jQuery no necesita un único elemento raíz al analizar html. Por ejemplo, 'alerta ($ ('

') .length)' da como resultado "2". –

+1

Pero creo que cada uno lo requiere y eso es lo que creo que quiso decir :) –

+0

Ninguno de esos ejemplos funciona. ¿Debo devolver los datos como una cadena? –