JQuery сообщает об отсутствии прямых потомков документа - PullRequest
2 голосов
/ 28 августа 2011

Я сейчас использую jQuery 1.6.1.В Firebug я видел, что это:

console.log($(document).find("*"))

делает то, что я ожидаю;возвращает все дочерние элементы документа.Но это:

console.log($(document).find("> *"))

нет.Возвращает пустой набор!Мне кажется, что если документ имеет потомков, то он должен иметь хотя бы одного прямого потомка.JQuery, очевидно, не согласен.Это ошибка или недоразумение с моей стороны?Также обратите внимание, что это:

console.log($("body").find("> *"))

делает то, что я ожидаю, он возвращает прямых потомков тега body.Заранее благодарим за понимание!

1 Ответ

1 голос
/ 28 августа 2011

document действительно (по крайней мере) имеет одного дочернего элемента, который является HTMLHtmlElement (который наследует форму HTMLElement), так что да, теоретически, jQuery (или Sizzle в этом случае) должен возвращать этого.

Это ошибка?Это может быть дизайнерское решение.Но давайте посмотрим, что $(document).children() дает нам:

alert($(document).children().length);

выводит 1.

Интересно также, что $(document).find("> html") возвращает пустой набор, тогда как $(document).find("html") возвращает HTMLHtmlElement.Но следующее: true:

$(document).find("html").parent()[0] === document

По крайней мере, это противоречие в jQuery..find('> *') должен возвращать те же элементы, что и .children() IMO.

Это может быть ошибкой в ​​Sizzle или jQuery (кто-то, у кого достаточно времени, может взглянуть на источник Sizzleкод [источник] и выясните, где может быть проблема).

С другой стороны, можно сказать, что дочерний селектор работает только на узлах Element, а document не является узлом Element.С этой точки зрения, нет ошибки, только это несоответствие.

...