Как jQuery относится к элементам комментариев? - PullRequest
8 голосов
/ 22 ноября 2011

Я всегда думал, что jQuery работает только с DOM элементами , то есть теми узлами, которые имеют nodeType == 1.

Однако я шокирован тем, что при создании HTML $("<p> </p><!-- comment -->") получается:

[p, Comment { data=" comment ", length=21, nodeName="#comment", more...}] (форматирование Firebug)

Я принял HTML от AJAX, и таким образом был создан комментарий DOM, который был передан где-то функции, применимой только к элементам: defaultView.getComputedStyle( elem, null )

Есть ли какой-то чистый выход из этого?

Ответы [ 2 ]

5 голосов
/ 22 ноября 2011

Я всегда думал, что jQuery работает только с элементами DOM

Только его селекторы выбор элементов DOM. В вашем случае вы создаете узлы из предоставленной вами строки HTML. Поэтому jQuery анализирует строку и возвращает вам запрошенные узлы.

Чтобы почистить его, сделайте .filter().

var els = $("<p> </p><!-- comment -->").filter(function() { 
                                                  return this.nodeType === 1; 
                                               });
5 голосов
/ 22 ноября 2011

Хм, интересная проблема.Немного покопавшись, я обнаружил, что вы можете удалить их, используя .filter с универсальным селектором (*).

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