Jquery理解查找方法

时间:2013-05-22 13:41:47

标签: jquery

我是jquery的新手,我在理解Jquery.find()方法时遇到了问题。我一直在阅读其他回复,但我觉得我仍然缺少一些东西。

我正在进行ajax调用并获得html返回。

<!DOCTYPE html> 
<head><title></title></head>
<body>
<form name="CALC"><table>....</table></form>
</body>
</html>

然后我做了

$(data).find('table');

并且一切都按预期工作,但是当我执行类似的ajax调用并获得以下html

<!DOCTYPE html> 
<head><title></title></head>
<body>
<div class="paraSearch">.....</div>       
</body>

然后我做了

$(data).find('.paraSearch');

我没有收到div对象。相反,我正在寻找的div是在prevObject数组中。但是,如果我打电话,那么工作是什么:

$(data).closest('.paraSearch');

我知道find()可以返回一个数组,因为它可以选择多个元素。但那为什么第一个版本有用?

感谢您的解释!

更新

只是为了澄清我的问题是当我尝试附加具有ajax调用的文件时:

var content = $( data).find( '.paraSearch' );
$(sectionName).append(content);

没有添加任何东西。

2 个答案:

答案 0 :(得分:3)

find()会搜索您调用它的元素的后代,以寻找您正在寻找的内容。

closest()会搜索您调用它的元素的祖先,以寻找您正在寻找的内容。

基本上,find遍历树,closest遍历树。

答案 1 :(得分:1)

在字符串中对HTML使用find方法时,会删除某些标记。来自docs

  

传递复杂的HTML时,某些浏览器可能无法生成DOM   它完全复制了提供的HTML源代码。如上所述,jQuery   使用浏览器的.innerHTML属性来解析传递的HTML和   将其插入当前文档。在这个过程中,一些   浏览器过滤掉某些元素,例如&lt; html&gt;,&lt; title&gt;或   &LT; HEAD&GT;元素。结果,插入的元素可能不是   传递原始字符串的代表。

因此,在您的情况下,搜索从正文中的第一个孩子开始。在第一种情况下,它是形式,因此find()函数通过查找该元素的后代来工作(正如其他人所提到的)。但是,在第二种情况下,类'paraSearch'的DIV是起始元素,它不能是它自身的后代,所以find()找不到它。但是,nearest()函数会找到它,因为它首先测试元素本身。来自docs

  

.closest(选择器)   描述:对于集合中的每个元素,获取第一个元素   通过测试元素本身并遍历来匹配选择器   通过DOM树中的祖先。

您可以通过在第二个示例中将父DIV放置到'paraSearch'DIV来检查这一点,然后find()将起作用。

有关详细信息,请查看此主题: Using jQuery to search a string of HTML