jQuery选择器问题。选择所有不以(字符串)开头的节点。

24

尝试组合一个相当复杂的 jQuery 选择器,但遇到了困难。

基本上,我正在尝试获取所有不具有 "rel" 属性为 "facebox" 其 "href" 属性不以 "mailto" 开头的锚点。

这是我一直在尝试的内容:

$('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]')都可以正常工作,但用逗号分隔开就不行。 - Jeremy Ricketts
这是因为逗号将其后的对象添加到jQuery对象中,有效地选择除具有rel=facebox和href与mailto的节点之外的所有节点。 - Svante Svenson
3个回答

55

您需要使用:not选择器

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

编辑:我借用了你的答案来更正


现在我对选择它作为被接受的答案感到更加满意了。你最初关于:not选择器的想法是正确的,但我没有正确表达我的问题。 - Jeremy Ricketts
关于这个答案的问题:为什么需要使用^=?那不是意味着“不等于”,而你已经写了“:not”了吗? - user1477388

3
先生,你好。JQuery让您的头晕了。您正在尝试链接选择器逻辑...有点像jQuery链接方法。在您的第二个选择器(a[href!^="mailto"])中,您想说...不包含此属性的内容。您要表达的是“搜索所有不是mailto的内容”和“搜索所有包含mailto的内容”。就像光滤镜一样...如果您过滤红光...并在上面放置黄光滤镜...您没有过滤橙色光...您只是过滤了一切(对于比喻的伸展感到抱歉)。因此,您要做的是使用伪选择器:not。

像这样- $(a:not([href^=mailto:])).无论您想用什么Jquery方法;

编辑: 好吧,现在您已经正确规定了问题...您可以这样做-$(a:not([href^=mailto:],[rel=facebox])).任何您想使用的Jquery函数;


0

这不应该是:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接