我是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);
没有添加任何东西。
答案 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