Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery.closest()遍历DOM_Jquery_Jquery Selectors_Closest - Fatal编程技术网

使用jQuery.closest()遍历DOM

使用jQuery.closest()遍历DOM,jquery,jquery-selectors,closest,Jquery,Jquery Selectors,Closest,我原以为.closest()很容易处理的事情,结果却不是(或者我犯了一个愚蠢的错误) 我试图做的是从带有内部文本的中访问元素:我在这里: <li> <label>I WANT TO ACCESS THIS ELEMENT</label> <div>...</div> <div> <input/> <input/> <inpu

我原以为
.closest()
很容易处理的事情,结果却不是(或者我犯了一个愚蠢的错误)

我试图做的是从带有内部文本的
中访问
元素:
我在这里

<li>
    <label>I WANT TO ACCESS THIS ELEMENT</label>
    <div>...</div>
    <div>
        <input/>
        <input/>
        <input/>
        <div id="start">I AM HERE</div>
    </div>
</li>
但是它不会返回任何内容。

.closest()
只查找初始选择的祖先元素。您需要组合使用
.closest()
.sibbins()
.children()


.closest
仅查找选定元素的父元素。试试这个:

$("#start").closest("li").children("label");
更新


更改为
.children
>标签“
选择器已折旧。

最接近的将从当前元素开始,并向上移动到DOM树,但由于
不是当前元素的父级,因此需要使用两个查找:

 $('#start').closest('li').children('label');

这将是您最有效的遍历。

我知道这很旧,但这里是最快的方法

$('#start').closest('li').find('label');

find()
使用本机浏览器方法,
children()
使用浏览器解释的JavaScript

谢谢Jasper!您的解决方案与Kevin提供的解决方案(例如性能)是否有很大差异?@AllenLiu只要您可以从选择器中删除字符串,它们的性能就会更快。我提供的最快的选择器是:
$('#start').parent().prev().prev()@AllenLiu。微观差异。不要在上面浪费时间。@AllenLiu我还注意到您正在这样做表单输入:
。parent().prev().prev()
可能会为您节省一两毫秒,如果在
标签
之后向
li
添加一个元素,或者如果移动了
#start
,则需要更新它。我想这就是微优化的代价。我会问你和我问贾斯珀一样的问题。您的解决方案与Jasper提供的解决方案(例如性能)有什么大的不同吗?您可以使用
.find(“>label”)
而不是
.children('label')
或更快的
.children().first()
。顺便说一句,谢谢=)我真的很感谢你的帮助。除非你处理的是一个通过数百个元素的循环,否则没有什么值得花时间的。如果需要,请在上为其创建一个测试。我建议您选择更适合阅读的方法。此外,出于微观优化的考虑,
.children(“label”)
比我的方法更快,而且在我看来更容易阅读。如果
.closest()
似乎不起作用,为什么不看看下面的方法呢?或者遍历方法列表:找到一个更合适的方法…nnnnnn-我确实看过文档,这就是我提出测试的原因。文档特别提到“获取与选择器匹配的第一个元素,从当前元素开始,通过DOM树向上。”我认为我试图访问的标签在DOM树中。好问题!我还没有使用过nearest(),但现在我知道我需要这样做。很好的例子。对不起,艾伦,这么多人在这里发帖而不是使用doco(或谷歌),我想我认为你就是这样一个人。再次抱歉。“通过DOM树向上”的意思是直接向上,而不是横向。例如,父母、祖父母、曾祖父母等,但不包括阿姨/叔叔、表兄弟姐妹、兄弟姐妹。谢谢nnnnnnnn。我理解你想说的=)我们中的一些人只有从文件中我们才能理解的那么好。
$("#start").closest("li").children("label");
 $('#start').closest('li').children('label');
$('#start').closest('li').find('label');