$(" selector")的jquery find()方法之间的区别.find和$(" selector")。contents()。find()

时间:2014-04-25 13:12:07

标签: jquery html

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

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


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

有数以千计的链接。我发现有两个代码,一些链接返回偏移为0。什么是使其成为万无一失的完美方式?

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

4 个答案:

答案 0 :(得分:2)

这两者在他们搜索的内容上有所不同。如果您尝试find()的元素是contents()返回的元素之一,则不会返回该项目。

见这个例子:

http://jsfiddle.net/Ta2QJ/

<div id="topDiv">
    <div id="targetDiv">
        <div id="innerDiv">
        </div>
    </div>
</div>

console.log($('#topDiv').find('#targetDiv').length); // 1
console.log($('#topDiv').contents().find('#targetDiv').length); // 0

但是,如果.contents()未返回您要查找的元素,则没有区别。你只是拉动当前元素的直接子元素,然后在这些元素上调用.find()

答案 1 :(得分:1)

你只需要:

var offset = $('#' + list1).offset();

id属性必须是唯一的,如果没有,你应该处理它。

.contents()仅对在iframe中查找元素以及获取文本节点和注释非常有用。

答案 2 :(得分:0)

发现会更深入。它不仅可以找到儿童,还可以找到儿童。

内容与儿童最相似,但内容也将获取直接子集中的文本节点。话虽这么说,我想你可以说内容,就像孩子一样只会去1层,而在那里,我们正在做一个选择对象是根的选择器。

这有意义吗?

调用:contents()。find(&#34; beta&#34;)基本上只是将根设置为1层,实际上,它将为所有孩子执行选择器。

〔实施例:

a = $(".myDiv");
b = $(".myDiv").contents().find("li");
c = $(".myDiv").find("li");

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

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

真正的区别在于&#34; root&#34;关于对象。对于b,contents()数组中的每个项目都是自己搜索的根,而另一方面,.myDiv是根。

答案 3 :(得分:0)

$("selector").contents().find()

获取匹配元素集中每个元素的子元素,包括文本和注释节点以及查找内容。


$("selector").find()

获取当前匹配元素集中每个元素的后代,由选择器,jQuery对象或元素过滤。