我的布局与此类似:
<li class="item">
<div class="data">
<div class="pics">
<div class="pic"></div>
<div class="pic"></div>
<div class="pic"></div>
<div class="btns">
<div class="btn 1"></div>
<div class="btn 2"></div>
</div>
</div>
</div>
<input type="hidden" value="" name="">
<input type="hidden" value="" name="">
<input type="hidden" value="" name="">
<input type="hidden" value="" name="">
</li>
我想做的是单击按钮
<li>
之一时从class="btn"
捕获所有输入元素。我采用的方法本质上是抓住按钮的<li>
父级,然后选择<input>
元素...var inputs = $($(element).parents('.item')[0]).children('input');
...其中
element
是要单击的按钮之一。这种方法似乎可以满足我的要求,但是有更好的方法吗?似乎效率很低,但是我没有确切的性能指标。有什么想法或建议吗?
更新
我去了jsPerf来测试我的选项:http://jsperf.com/jq-select。看来我拥有的东西比使用
closest()
更快,而我猜不到。 最佳答案
我发现这更方便一些,因为它是从父级开始的:
$('li').has(this).find('input')
性能:http://jsperf.com/jquery-closest-vs-has —请注意,最佳性能来自缓存
$('li')
。但是,如果您真的想查看性能,我可以在http://jsperf.com/jq-select/3上使用缓存的
li
has
/ children
方法(比您的方法快约33%)和仅DOM版本增强您自己的JSPerf。您会看到真正的鸿沟有多大(尚未真正优化,但仍快了7800%!)。这强调了前提:当速度确实很重要时,请使用DOM。如果您使用的是JQuery,请选择最方便易用的表达式。