使用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;i
var 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 => {
  // ...
});