具有Prototype的多个CSS选择器

时间:2012-05-14 13:22:39

标签: javascript prototypejs css-selectors sizzle

我正在重构一些目前看起来像这样的代码:

$$('#wrapper > div').each(function(e){ 
    if((e.id!='header') && (e.id!='footer') && (e.id!='content')){
        // various other stuff here
    }
});

我想切换初始选择器并检查ID到单行,这些内容如下:

$$('#wrapper > div[id!=header]', '#wrapper > div[id!=content]', '#wrapper > div[id!=footer]')

多个选择器不起作用,但每个选择器本身都能正常工作。不确定这是否是语法问题或者Prototype docs说这应该有效但是只要我添加额外的选择器就不会有效。

确认这有效:

$$('#wrapper > div[id!=header]')

这有效:

$$('#wrapper > div[id!=footer]')

但这无法选择(不抛出错误)

$$('#wrapper > div[id!=header]', '#wrapper > div[id!=footer]')

2 个答案:

答案 0 :(得分:2)

您可以将选择器相互追加div[attr selector 1][attr selector 2] 请参阅以下example fiddle

您最初尝试的问题。即使用逗号分隔选择器,它们是OR - ing。因此,即使您指定了所有三个,其他每个都将返回其他人尝试排除的内容。

答案 1 :(得分:2)

这两个代码片段完全不同。相当于顶部代码段的应该是:

$$('#wrapper > div[id!=header][id!=footer][id!=content]')

您的选择器会选择所有包含id的div,因为那些“footer”将在“not header”下选择。