【问题标题】:jQuery selector question. Select all nodes that do NOT START with (string)jQuery 选择器问题。选择所有不以(字符串)开头的节点
【发布时间】:2012-10-11 09:49:37
【问题描述】:

在这里尝试组装一个相当复杂的 jQuery 选择器,但遇到了麻烦。

本质上,我试图抓住所有锚点,即 1) 没有“facebox”的“rel”, OR 2) 没有以“mailto”开头的“href”。

这是我一直在尝试做的:

$('a[rel!=facebox], a[href!^="mailto"]')

这种小变化似乎不起作用。有没有更好的方法来解决这个问题?

这些选择器似乎可以单独工作,但在连续坐在同一个选择器中时却不行:

$('a:not([rel=facebox]), a:not([href^=mailto])')

最终解决方案:我们赢了!

$('a:not([rel=facebox],[href^=mailto])')

【问题讨论】:

  • 奇怪的是,$('a:not([rel=facebox]') 和 $('a:not([href^=mailto]') 工作正常,但不是都用逗号分隔.
  • 这是因为逗号将它后面的对象添加到 jQuery 对象中,有效地选择除了具有 rel=facebox 和 href 的节点之外的所有节点。

标签: jquery


【解决方案1】:

你想要:not selector

$("a:not([rel=facebox],[href^=mailto])");

编辑:我偷了你的正确答案

【讨论】:

  • 我们去 - 现在我觉得选择它作为接受的答案更好。你最初对 :not 选择器的看法是对的,但我没有正确表达我的问题。
  • 关于这个答案的问题:为什么需要 ^=?这不是意味着“不等于”,而您同时已经写了“:不”?
【解决方案2】:

好的,杰里米·里基茨先生。 Jquery 搞砸了你的脑袋。您正在尝试链接选择器逻辑......有点像 jQuery 如何链接方法。在您的第二个选择器 (a[href!^="mailto"]) 中,您试图说...不是包含 THIS 属性的东西。您所说的是“搜索所有不是 mailto 的东西”和“搜索所有包含 mailto 的东西”。就像滤光片......如果你过滤红光......并在顶部放置一个黄色滤光片......你没有过滤橙色光......你只是过滤掉了所有东西(对不起,类比的延伸) .所以你想要做的是使用伪选择器 :not.

像这样 - $(a:not([href^=mailto:])).whateverJqueryMethodYouWant();

编辑: 好吧,既然您已经正确地说明了问题...您可以这样做 - $(a:not([href^=mailto:] , [rel=facebox])).whateverJqueryFunctionYouWant();

【讨论】:

    【解决方案3】:

    不应该是:

    $("a:not([rel='facebox'],[href^='mailto'])");
    

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 2014-08-02
      • 2011-06-27
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2022-12-24
      相关资源
      最近更新 更多