如何仅使用 javascript 获取特定 div/form 的所有子输入?

Qwe*_*rts 5 html javascript css forms

我在这里看到了类似的帖子,但是我想使用 javascript 做类似的事情。基本上有一种方法可以在某个容器(例如 div 或表单)中获取所有用户输入

<form>
<div>
   <text>
</div>
<div>
  <textarea>
</div>    
 <div>
   <select>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)

一个例子是抓取文本、文本区域、选择和其他形式的用户输入。我看到了类似的东西

var elements = document.myform.getElementsByTagName("input")
Run Code Online (Sandbox Code Playgroud)

但它不适用于选择。我知道我可能只有一个重复的方法来尝试查找(“选择”)但是如果表单必须保持用户输入信息的顺序怎么办。

编辑:感谢您的所有答复。到目前为止提到的所有方法是否仅在输入是直接后代时才有效,还是有其他方法?

hev*_*ev1 7

您可以使用查询选择器。

document.querySelectorAll('#divID input, #divID select, #divID textarea');
//selects all elements contained by #divId that are input, textarea, or select elements
Run Code Online (Sandbox Code Playgroud)

document.querySelectorAll('#divID input, #divID select, #divID textarea');
//selects all elements contained by #divId that are input, textarea, or select elements
Run Code Online (Sandbox Code Playgroud)

您也可以先获取divor form,然后使用querySelectorAll它来获取它包含的所有inputs、selects 和textareas(不仅仅是直接子级)。

<div id="myDiv">
<form>
<input type="text">
<select>
<option>1</option>
</select>
<textarea>Text...</textarea>
<div>
 <span>
     <select id="nestedSelect"></select>
 </span>
</div>
</form>
</div>
<script>
var inputs = document.querySelectorAll('#myDiv input, #myDiv select, #myDiv textarea');
for(let i = 0; i < inputs.length; i++){
  console.log(inputs[i]);
}
</script>
Run Code Online (Sandbox Code Playgroud)

  • `document.querySelectorAll('#divID &gt; input, #divID &gt; select');` 应该更好 (2认同)
  • @DanielBeck 猜对了 :) (2认同)

Ric*_*ick 5

使用.querySelectorAll指定由 a 分隔的每个元素来,从表单中进行选择:

var elements = form.querySelectorAll('input, textarea, select');
Run Code Online (Sandbox Code Playgroud)

var elements = form.querySelectorAll('input, textarea, select');
Run Code Online (Sandbox Code Playgroud)
var form = document.querySelector('form');
var elements = form.querySelectorAll('input, textarea, select');

elements.forEach(function(element) {
  // access each element here
  console.log(element);
});
Run Code Online (Sandbox Code Playgroud)
input, textarea, select {
  display: block;
}
Run Code Online (Sandbox Code Playgroud)