2012-04-05 15 views
6

Esta es una pregunta muy simple que parece que tampoco puedo encontrar una buena respuesta.jQuery OBTENER html como objeto jQuery transitable

$.get('/myurl.html', function(response){ 
    console.log(response); //works! 
    console.log($(response).find('#element').text()); //null :(
}, 'html'); 

Solo estoy tratando de atravesar mi respuesta html. Hasta ahora, lo único que se me ocurre que funcionaría es regexar dentro de las etiquetas corporales, y usar eso como una cadena para crear mi objeto jQuery transitable. Pero eso solo parece estúpido. ¿Alguien quiere señalar la forma correcta de hacer esto?

Tal vez es mi html?

<html> 
    <head> 
     <title>Center</title> 
    </head> 
    <body> 
     <!-- tons-o-stuff --> 
    </body> 
</html> 

Esto también funciona bien, pero no se adapte a mis necesidades:.

$ ('# myelem') carga ('/ #element myurl.html');

+1

Si está buscando algún elemento en la respuesta html con un atributo 'id' con el valor" elemento ", entonces me parece correcto. No estoy seguro de por qué eso no funcionaría. – jessegavin

+1

¿Cómo se ve el html que está buscando? –

+0

Esto debería responder a su pregunta: http://stackoverflow.com/questions/9540218/a-javascript-parser-for-dom/9540313#9540313 –

Respuesta

7

No funciona porque no le gusta <html> y <body>.

utilizando el método descrito aquí: A JavaScript parser for DOM

$.get('/myurl.html', function(response){ 
    var doc = document.createElement('html'); 
    doc.innerHTML = response; 

    console.log($("#element", doc).text()); 
}, 'html'); 

creo que lo anterior debería funcionar.

+0

Eso funcionó. ¿Pero por qué? – Fresheyeball

+0

Tendría que mirar el detalle interno de cómo funciona jquery para responder eso. Básicamente jquery tiene una forma de cómo construye objetos dom cuando cuando se da un argumento de cadena html.Esto es simple, no es compatible con las cadenas html que contienen las etiquetas 'body' y' html', pero afortunadamente no es la única manera y el camino anterior es una forma diferente de hacerlo. –

+0

eso es realmente interesante. – Fresheyeball

0

Prueba esto:

$("#element", $(response)).text() 

Este busca el ID de elemento en el $ (respuesta) tratar $ (respuesta) como un objeto DOM.

+0

response.responseText no está definido – Fresheyeball

1

Cuando jQuery analiza HTML normalmente eliminará las etiquetas html y body, por lo que si el elemento que está buscando está en el nivel superior de la estructura del documento una vez que se han eliminado las etiquetas html y body, entonces la función find no podrá ubicar el elemento que está buscando.

Ver esta cuestión para más información - Using jQuery to search a string of HTML

+0

No era un elemento de nivel superior. – Fresheyeball

-1

tal vez soy malentendido algo, pero

.find('#element') 

elementos de los partidos con un ID de "elemento", como

<p id="element"> 

Desde No veo el HTML "toneladas de cosas". No entiendo qué elementos estás tratando de encontrar.

+1

Esta no es una respuesta David. Sería más apropiado haber publicado esto como un comentario. –