我正在重构一些目前看起来像这样的代码:
$$('#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]')
答案 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
”下选择。