【问题标题】:How to cleanly define $().on() selectors如何干净地定义 $().on() 选择器
【发布时间】:2018-07-13 23:06:01
【问题描述】:

我正在使用现有的 jQuery(版本 3.2.1)函数:

$('#example').on('click', 'tbody td:not(:first-child)', 
   function (e) {
      // do stuff
  });

在这种情况下,function(e) 仅在 TD 不是该行的第一列时才会起作用。

如果我需要添加更多的非条件(恰好是一个至少有 5 个这样的列的表),该函数会变得有点难看。

在测试中,我知道它有效,但必须有更好的方法来做到这一点。

$('#example').on('click', 'tbody td:not(:first-child):not(:nth-
    child(2)):not(:nth-child(3))',  
function (e) {
   // do stuff
});

是否有更简洁的技术来指示选择器中的一组非条件?我在想我可以用一个函数替换选择器字符串,但我还没有看到使用中的示例,即使在jQuery website 上也是如此。

【问题讨论】:

  • :not(.excludeme)
  • .excludme 是一个类?
  • 好吧,excludeme 将是类名。
  • @KevinB -- 您应该将此作为答案发布。它很简单,而且效果很好。
  • 知道这是一个迟到的答案,尽管为什么不简单地使用tbody td:nth-child(n+4) ...它将从第4项开始,并且比排除前3项更短/更简单...但是如果要使用 exclude 逻辑,这将给出相同的结果tbody td:not(:nth-child(-n+3))

标签: jquery css css-selectors


【解决方案1】:

您在寻找类似this 的东西吗?

$("#example")
  .not(":first-child")
  .not(":nth-child(2)")
  .not(":nth-child(3)")
  .on('click', 
    function (e) {
     // do stuff
   });

免责声明:我没有检查这是否真的有效。

【讨论】:

  • 我测试了@Kevin B 的评论,它实际上是最简单的。 :not(.excludme) 我需要做的就是装饰我需要的特定列,它可以完美运行。
  • 拥有一个排除类是一种更快的解决方案。但请记住,您也可以使用此处的代码示例链接not
【解决方案2】:

@lilezek 的回答很好。如果您希望将目标缩短为单行,您可以在其他地方的变量中定义字符串,然后将该变量作为选择器传递给您的事件处理程序。

var selector_foo = 'tbody td:not(:first-child):not(:nth-
child(2)):not(:nth-child(3))'
...
$('#example').on('click', selector_foo, 
    function (e) {
        // do stuff
});

【讨论】:

  • 两种方法都有其优势和挑战,具体取决于您的生态系统。我可以为多个答案投票,但遗憾的是,我不能将多个答案标记为“答案”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多