【发布时间】:2018-11-03 21:16:04
【问题描述】:
我有一个普通的<input> 元素。
我希望document.querySelectorAll('input[type="text"]') 能够(至少)检索到该输入,因为the default input type is text。
但querySelectorAll 不会返回该输入,除非我明确设置type="text"。
我有两个问题:
- 为什么 querySelectorAll 会忽略带有隐式
type="text"的输入? - 是否存在针对隐式类型为
text的输入的查询,该查询排除了所有类型不是text的输入?
这是一个说明问题的示例文档:
var output = document.getElementById('output');
var textInputs = document.querySelectorAll('input[type="text"]');
output.innerText = 'input[type="text"] - ' + textInputs.length + ' elements';
var inputs = document.querySelectorAll('input');
output.innerText += '\ninput - ' + inputs.length + ' elements';
output.innerText += '\n\nFirst input type: ' + inputs[0].type;
#output {
font-family: monospace;
}
<form>
<input>
<input type="text">
<div id="output"></div>
</form>
这是我的浏览器 (Chrome) 中的 JavaScript 输出:
input[type="text"] - 1 elements
input - 2 elements
First input type: text
【问题讨论】:
-
因为它是一个属性等于选择器。如果属性不存在,则不等于
"text"。 -
@不,是的。公平地说,类型 是
text默认情况下...似乎这只是我没想到的querySelectorAll的怪癖。 -
document.querySelectorAll('input:not([type]), input[type=text]')
标签: javascript html css-selectors