我的布局与此类似:

<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,请选择最方便易用的表达式。

10-06 04:38