使用JavaScript获取所有输入对象的列表,而不访问表单对象
我需要获取所有使用JavaScript获取所有输入对象的列表,而不访问表单对象,javascript,html,input,field,Javascript,Html,Input,Field,我需要获取所有输入对象,并操作onclick参数 以下内容用于链接。正在为input标记查找类似的内容 for(var ls=document.links,numLinks=ls.length,i=0;ivar inputs=document.getElementsByTagName('input'); 对于(变量i=0;i
输入
对象,并操作onclick
参数
以下内容用于
链接。正在为input
标记查找类似的内容
for(var ls=document.links,numLinks=ls.length,i=0;ivar inputs=document.getElementsByTagName('input');
对于(变量i=0;i
(请参阅答案末尾的更新。)
您可以通过getElementsByTagName
(,)获取所有输入
元素的一个名称,然后简单地循环:
var inputs, index;
inputs = document.getElementsByTagName('input');
for (index = 0; index < inputs.length; ++index) {
// deal with inputs[index] element.
}
…但是您已经说过您不想使用父级表单
,因此第一个示例更适用于您的问题(第二个示例只是为了完整性,以防其他人发现此答案需要知道)
更新:getElementsByTagName
是执行上述操作的绝对好方法,但是如果您想执行稍微复杂一点的操作,比如只查找所有复选框而不是所有的输入
元素,该怎么办
这就是有用的queryselectoral
的作用:它让我们得到一个元素列表,这些元素与我们想要的任何CSS选择器相匹配
var checkboxes = document.querySelectorAll("input[type=checkbox]");
您也可以在元素级别使用它。例如,如果在元素
变量中有一个div
元素,我们可以找到span
类foo
中的所有div
元素,如下所示:
var fooSpans = element.querySelectorAll("span.foo");
querySelectorAll
和它的近亲querySelector
(只找到第一个匹配元素而不给你列表)受所有现代浏览器和IE8的支持。返回一个节点列表,它有自己的方法:
现在返回一个HTMLCollection,而不是节点列表。因此,您首先需要将其转换为,以访问map和:
哎哟,这太难看了,还存在一些转义问题。你永远都不想使用javascript
URL。我对这段代码的建议是:将href
放在原处,而只需设置ls[i]。onclick=function(){LoadExtern(this.href,'ControlPanelContent',true,true);}
。为什么要使用++索引?NodeList中的元素从0开始。这样,你就跳过了第一个元素???@Alko:我不会跳过第一个。循环中index
的第一个值是0
。++index
直到第一次循环迭代之后才会发生。这会得到嵌套的元素吗?例如,如果我有一个表单,然后在该表单中有一个表,在该表中有一行,在该行中有一个输入-这实际上会得到该输入吗?我认为它可能只适用于顶级输入。我需要得到所有输入,嵌套的或不嵌套的。可能需要recursion@MobileMon-是的,它适用于非子后代元素。我不是意识到任何DOM方法实际上只查找子元素(只有DOM集合,如children
和childNodes
)。
var checkboxes = document.querySelectorAll("input[type=checkbox]");
var fooSpans = element.querySelectorAll("span.foo");
document.querySelectorAll('input').forEach( input => {
// ...
});
Array.from(document.getElementsByTagName('input')).forEach( input => {
// ...
});