javascript - 为什么文本类型上的 querySelectorAll 会错过具有隐式文本类型的输入?
问题描述
我有一个简单的<input>
元素。
我希望document.querySelectorAll('input[type="text"]')
(至少)检索该输入,因为默认输入类型是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
解决方案
属性选择器不考虑无效或缺失值默认值。只有在标记中明确指定了属性时,它们才会匹配。
您仍然可以使用 来解释缺失值默认值input:not([type])
,因为input
没有属性的元素type
通过其缺失值默认值保证为文本输入(除非被脚本改变)。
var output = document.getElementById('output');
var textInputs = document.querySelectorAll('input:not([type]), 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">
<input type="number">
<div id="output"></div>
</form>
推荐阅读
- sql - SQL 将数据转置为列
- reactjs - 如何使用 React 测试库找到并单击没有文本的按钮?
- uitableview - Swift SearchBar inTableView 未在过滤的行中显示正确的数据
- c++ - C++ 是否可以接受任何类型的输入?
- xml - 如何在 PL/SQL 数据库中保存 XML 文件
- c# - 如何从另一个表单设置文本框的默认文本?
- graphql - 为来自具有对象数组的 API 的响应创建 graphql 模式
- sql - 如何在 SQL 中获取本质上是嵌套聚合函数的完整行?
- python - Tkinter 不能在内部使用几何管理器网格
- numerical-methods - 拉盖尔方法