【问题标题】:Multiple CSS Selectors with Prototype带有原型的多个 CSS 选择器
【发布时间】:2012-05-21 23:43:22
【问题描述】:

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

$$('#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]')

【问题讨论】:

  • 修改了问题,现在应该更有意义了

标签: javascript prototypejs css-selectors sizzle


【解决方案1】:

这两个代码 sn-ps 做了完全不同的事情。相当于上面的sn-p应该是这样的:

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

您的选择器将选择所有具有id 的 div,因为那些“footer”将在“非header”下被选中。

【讨论】:

  • @Amadan,那是几秒钟,哈哈
【解决方案2】:

您可以将选择器彼此附加div[attr selector 1][attr selector 2] 请看以下example fiddle

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

【讨论】:

    猜你喜欢
    • 2011-06-10
    • 2021-12-26
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2013-08-08
    • 2020-10-09
    • 2019-05-15
    相关资源
    最近更新 更多