2011-11-22 22 views
8

Siempre pensé que jQuery funciona solo en DOM elementos, es decir, esos nodos que tienen nodeType == 1.¿Cómo trata jQuery los elementos de comentario?

Sin embargo me sorprende que, si bien la creación de HTML $("<p> </p><!-- comment -->") resultados en:

[p, Comment { data=" comment ", length=21, nodeName="#comment", more...}] (formato Firebug)

yo aceptamos algo de HTML por AJAX y un DOM comentario fue creado de esta manera y pasado algún lugar a una función eso es aplicable solo a los elementos: defaultView.getComputedStyle(elem, null)

¿Hay alguna manera de salir de esto?

Respuesta

5

siempre pensé que jQuery opera sólo en DOM elementos

Sus selectores única seleccionar elementos DOM. En su caso, está creando nodos a partir de la cadena HTML que ha proporcionado. Entonces jQuery analiza la cadena y te devuelve los nodos que estás pidiendo.

Para limpiarlo, haga un .filter().

var els = $("<p> </p><!-- comment -->").filter(function() { 
                return this.nodeType === 1; 
               }); 
+0

Aceptado debido a la explicación. – tillda

+0

@tillda: Solo para su información, también es una operación más rápida con la prueba directa 'this.nodeType === 1' que la ejecución de un selector' "*' ', aunque con un pequeño conjunto, no hará una diferencia notable . – RightSaidFred

5

Hmm, un problema interesante. Después de jugar un poco, descubrí que puedes eliminarlos usando .filter con el universal selector (*).

var a = $("<p></p><!-- comment -->"); 
console.log(a); 
console.log(a.filter("*")); 
Cuestiones relacionadas