2

我是 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);

什么都没有添加。

4

2 回答 2

3

find()在您调用它的元素的后代中搜索您要查找的内容。

closest()搜索您调用它的元素的祖先以查找您要查找的内容。

基本上,find向下遍历树并向closest上遍历树。

于 2013-05-22T13:47:00.640 回答
1

当在字符串中的 HTML 上使用 find 方法时,某些标签会被删除。从文档

在传递复杂的 HTML 时,某些浏览器可能无法生成完全复制所提供的 HTML 源的 DOM。如前所述,jQuery 使用浏览器的 .innerHTML 属性来解析传递的 HTML 并将其插入到当前文档中。在此过程中,一些浏览器会过滤掉某些元素,例如 <html>、<title> 或 <head> 元素. 这样一来,插入的元素可能不能代表传递的原始字符串。

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

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

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

有关更多详细信息,请查看此线程: Using jQuery to search a string of HTML

于 2013-05-22T14:01:44.513 回答