jQuery.find()的奇怪行为

时间:2012-11-09 16:07:59

标签: jquery-selectors

我不太明白为什么查找在这里表现:

var data = $("<html><title>hello</title><body><form><ul><li>here</li></ul></form></body><ul><li></li></ul></html>");
alert(data.find("form").length);
alert(data.find("ul").length);
  1. 找不到表格
  2. 找不到第二个UL
  3. 我也为这个 -

    提出了一个小问题

    http://jsfiddle.net/erick382/YP9kz/

2 个答案:

答案 0 :(得分:2)

它找不到form元素,因为它实际上是集合的根元素(它是body元素的直接子元素)。如果您将其更改为.filter,则会找到form

alert(data.filter("form").length); // 1

它没有找到第二个ul元素,因为它在body元素之外,这是无效的(jQuery将第二个ul放在集合的根目录中 - 使用{ {1}}你也可以找到那个。)

jQuery从集合中删除filter元素和html元素。如果你记录集合的内容,它会更清楚地发生了什么:

  

[body<title>​hello​</title>​<form>​…​</form>​]

答案 1 :(得分:0)

您需要将each添加到ul搜索中。我还添加了James对该演示的回答。

JSFiddle Demo