0

如何正确编写这个 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' 的元素,但类型按钮、提交、提交、隐藏、重置、文件、图像和搜索的输入除外。

4

1 回答 1

1

不幸的是,CSS3 的:not()选择器一次只允许一个简单的选择器。你得到了一个例外,因为你所有的: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'])
于 2012-06-28T18:45:11.467 回答