2011-08-28 1 views
2

현재 jQuery 1.6.1을 사용하고 있습니다. 방화 광에서 이걸 보았습니다 :jQuery가 문서의 직계 하위 항목을보고하지 않습니다.

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

내가 예상 한 것은 무엇입니까? 문서의 모든 자식을 반환합니다. 그러나 이것 :

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

않습니다. 그것은 빈 집합을 반환합니다! 문서에 자손이있는 경우 적어도 하나의 직접적인 자손이 있어야합니다. jQuery는 분명히 동의하지 않습니다. 이것은 버그입니까, 아니면 내 부분에 대한 오해입니까? 또한이 점을 유의하십시오 :

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

기대하는대로, body 태그의 직계 자손을 반환합니다. 모든 통찰력에 미리 감사드립니다!

+2

* 주 :'$ ("> elem", context)'선택자는 향후 릴리스에서 사용되지 않을 예정입니다. 따라서 대체 셀렉터를 사용하는 대신 그 사용법을 권장하지 않습니다. * ** 출처 : ** http://api.jquery.com/child-selector/ –

+0

흥미 롭습니다. 그 자리를 차지할 것이 무엇인지 아십니까? 다음 레벨 자손 만 선택하는 것이 중요 할 때가 있습니다. – dnuttle

+0

@dnuttle :'.children()'메쏘드로 항상 아이들을 선택할 수 있습니다. 물론 선택자'a> b '도 이전과 같이 작동합니다. –

답변

1

document 그래서 예, 이론적으로, JQuery와 (또는이 경우에 지글 지글)이 하나를 반환해야합니다, 참 (양식 HTMLElement을 상속)을 HTMLHtmlElement이다 (적어도) 하나의 자식을 가지고 있습니다.

버그입니까? 그것은 디자인 결정 일 것입니다.

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

출력 1 :하지만 $(document).children()이 우리에게주는 것을 볼 수 있습니다.

$(document).find("> html")은 빈 세트를 반환하는 반면, $(document).find("html")HTMLHtmlElement을 반환한다는 것도 흥미 롭습니다. 그러나 다음은 true입니다 :

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

은 적어도이 jQuery를에 일관성이있다. .find('> *').children() IMO와 동일한 요소를 반환해야합니다.

그것은 수도 지글 지글 또는 jQuery를에 버그가 수 (충분한 시간을 가진 사람이 Sizzle's source code [source]에서 모양과 문제가 될 수있는 곳을 찾을 수 있습니다.)

반면에 자식 선택기는 Element 노드에서만 작동하고 documentElement 노드가 아니라고 말할 수 있습니다. 이 관점에서 볼 때 아무런 버그가 없으며 단지 이러한 모순이 있습니다.