首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$("selector").find和$("selector").contents().find()的jquery ()方法的区别

$("selector").find和$("selector").contents().find()的jquery ()方法的区别
EN

Stack Overflow用户
提问于 2014-04-25 13:12:07
回答 4查看 157关注 0票数 0

通过获取元素的偏移量,我有两种导航方法:

代码语言:javascript
复制
 $("#selector").contents().find('#'+list1).each(function(){
     var offset= $(this).offset();
 }); 


 $("#selector").find('#'+list1).each(function(){
     var offset= $(this).offset();
 }); 

有成千上万的链接。我发现在这两个代码中,有几个链接将偏移量返回为0。什么是最完美的方法让它成为傻瓜的证据?

注释:所有节点都显示为block,并显示在选择器div中。我不能用document.getElementById()

EN

回答 4

Stack Overflow用户

发布于 2014-04-25 13:19:04

这两个人在搜索内容上是不同的。如果要find()的元素是contents()返回的元素之一,则不会返回该项。

参见此示例:

http://jsfiddle.net/Ta2QJ/

代码语言:javascript
复制
<div id="topDiv">
    <div id="targetDiv">
        <div id="innerDiv">
        </div>
    </div>
</div>

代码语言:javascript
复制
console.log($('#topDiv').find('#targetDiv').length); // 1
console.log($('#topDiv').contents().find('#targetDiv').length); // 0

但是,如果您要查找的元素没有由.contents()返回,那么就没有什么区别了。您只需提取当前元素的直接子元素,然后对这些元素调用.find()

票数 2
EN

Stack Overflow用户

发布于 2014-04-25 13:21:19

你只需要:

代码语言:javascript
复制
var offset = $('#' + list1).offset();

id属性必须是唯一的,如果不是,您应该处理这个问题。

.contents()只对查找iframes中的元素和获取文本节点和注释非常有用。

票数 1
EN

Stack Overflow用户

发布于 2014-04-25 13:15:43

发现会更深。它不仅能找到孩子,还能找到孩子们的孩子。

内容与子节点非常相似,但内容也将在直接子集中获取文本节点的例外。话虽如此,我想您可以说,内容,就像子程序一样,只会转到1层,就像find一样,正在做一个选择器,其中所选的对象是根。

这有意义吗?

调用: contents().find("beta")本质上只是将根向下设置1层,实际上,它将为所有子级执行选择器。

例外:

代码语言:javascript
复制
a = $(".myDiv");
b = $(".myDiv").contents().find("li");
c = $(".myDiv").find("li");

在这里,您将看到它将尝试查找内容数组的结果,然后调用find,这意味着它将沿着相应的树运行。

只要是find(),就会做同样的事情。

真正的区别在于什么是对象的“根”的范围。对于b,contents()数组中的每个项都是被搜索的根,而作为另一种方式,.myDiv是根。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23294185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档