【问题标题】:how to properly write a complete css3 selector to querySelectorAll如何正确编写完整的 css3 选择器到 querySelectorAll
【发布时间】:2012-06-28 18:40:25
【问题描述】:

如何正确编写这个 css3 选择器查询?

var elements = document.querySelectorAll("[data-datasource='ds1']:not(input[type='button']):not(input[type='submit']):not(input[type='submit']):not(input[type='hidden']):not(input[type='reset']):not(input[type='file']):not(input[type='image']):not(input[type='search'])");

上面的查询抛出一个语法错误。

我想选择所有具有 data-datasource='ds1' 的元素,但类型为 button、submit、submit、hidden、reset、file、image 和 search 的输入除外。

【问题讨论】:

  • 我不确定,但您可能需要说*[data-source=blah],即在选择器前加一个星号。
  • 您的选择器中有 :not(input[type='submit']) 重复。
  • @Will:不需要星号。

标签: css css-selectors selectors-api


【解决方案1】:

不幸的是,CSS3's :not() selector 一次只允许一个简单的选择器。您遇到了一个例外,因为您所有的 :not(input[...]) 选择器都是无效的 CSS3,因为它们包含两个简单的选择器:input 和一个属性选择器。

试试这个:

var elements = document.querySelectorAll("[data-datasource='ds1']:not(input), input[data-datasource='ds1']:not([type='button']):not([type='submit']):not([type='hidden']):not([type='reset']):not([type='file']):not([type='image']):not([type='search'])");

因为它仍然是一个很长的选择器字符串,所以这里是一个细分:

/* Any elements except input that have this attribute value */
[data-datasource='ds1']:not(input), 

/* Only inputs that have this attribute value, but not any of these types */
input[data-datasource='ds1']:not([type='button']):not([type='submit']):not([type='hidden']):not([type='reset']):not([type='file']):not([type='image']):not([type='search'])

【讨论】:

  • 太棒了!!!我使用了第一个查询。效果很好!我认为执行第二个和第三个查询并将结果组合起来会比执行第一个查询慢。通过这种方式,我使用了您的第一个解决方案。再次感谢。
  • 第二个和第三个其实和第一个一样……只是解释一下它是如何工作的。无论如何,您可以单击答案左侧的勾号将其标记为已接受,以表示感谢:)
猜你喜欢
  • 2018-09-07
  • 1970-01-01
  • 2023-04-04
  • 2011-02-11
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2023-03-13
  • 2014-05-18
相关资源
最近更新 更多