【问题标题】:jquery simplify selection for onclick eventjquery 简化了 onclick 事件的选择
【发布时间】:2013-10-02 21:01:03
【问题描述】:

看起来有问题(效率低下?):

$($('.feature-s').siblings()).children().children('a[data-target=#deleteModal]').parent().parent().click();

我想选择跨度:

/html/body/div/div/div/div[1][class="feature-s"]
/html/body/div/div/div/div[2]/span/a/i/span <= click

但不是在哪里:

/html/body/div/div/div/div[1][class="something else"]
/html/body/div/div/div/div[2]/span/a/i/span <= not handled

我在这里重现了这些情况:

http://jsfiddle.net/brianray/ncu6u/

如果我的选择器没问题,就这么说吧。我只是觉得必须有更好的方法来根据现有的 dom 选择该按钮。

谢谢!

【问题讨论】:

    标签: javascript jquery html jquery-selectors onclick


    【解决方案1】:

    最简单和最快的(在所有其他答案中)是:

    $('.feature-s + div a[data-target="#deleteModal"]')
    

    jsperf:

    【讨论】:

      【解决方案2】:

      检查下面的 jsFiddle。您可以使用 + 选择器直接选择 feature-s 之后的元素。

      $('.feature-s + div').find('a[data-target="#deleteModal"]').click(function(){
          alert('hey');
          return false;
      });
      

      下面的示例效果很好,而且效率更高。

      http://jsfiddle.net/ncu6u/1/

      【讨论】:

      • 信不信由你,这实际上慢了 6%!看起来更好虽然jsperf.com/selector-performance-test-mt
      • 应该提到,更高效的代码,而不是性能。 .find() 在性能方面是一头猪!
      • @mattytommo 启动时 6% 但谁在乎,因为它发生在后台?
      • Chris 是对的,我一直在寻找更好的代码。但是,我确实认为我们应该知道速度影响的影响,所以我很高兴@mattytommo 提到了这一点。谢谢!
      • @brianray 你看到我的回答了吗?稍微调整一下这个答案,你可以让它更快更简单:)
      【解决方案3】:

      我认为

      $('.feature-s').siblings()
      

      已经返回 jQuery 对象,因此您不必将其包装到 $() 中。

      一切看起来都很好。希望这会有所帮助。

      【讨论】:

      • 我认为它对于单行来说有点长,但它应该比我能想到的任何东西都快.....
      猜你喜欢
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2020-04-05
      相关资源
      最近更新 更多