使用带有 querySelectorAll 的 innerHTML

use*_*915 6 javascript

我想在重新提交尝试时使用类似于以下内容的内容来清除表单中的错误:

document.querySelectorAll("#form-error-name, #form-error-email, #form-error-tel, #form-error-dob, #form-error-password, #form-error-goal").innerHTML= "";
Run Code Online (Sandbox Code Playgroud)

...但 div 的内容没有被清除。我究竟做错了什么?

atm*_*tmd 8

您需要循环遍历结果

    var errors = document.querySelectorAll(
               "#form-error-name, 
                #form-error-email, 
                #form-error-tel, 
                #form-error-dob, 
                #form-error-password, 
                #form-error-goal");

[].forEach.call(errors, function(error) {
  error.innerHTML = '';
});
Run Code Online (Sandbox Code Playgroud)

querySelectorAllforEach不返回数组,而是返回节点列表,其原型上没有方法。

上面的循环使用了forEachnodeList 对象上数组对象原型上的方法。

  • 可能有助于解释结果是“NodeList.prototype”(而不是“Array.prototype”,并且没有数组原型方法),这就是您使用数组中的“forEach”的原因。 (3认同)

Joh*_*and 7

问题需要.innerHTML,但这在 上无效input;你实际上想要.value。适当的现代答案是

[... document.querySelectorAll('input')]
  .map(i => i.value = '');
Run Code Online (Sandbox Code Playgroud)


Gau*_*ave 6

尝试这个:

var x = document.querySelectorAll("#form-error-name, #form-error-email, #form-error-tel");
var i;
for (i = 0; i < x.length; i++) {
    x[i].innerHTML = "";
}
Run Code Online (Sandbox Code Playgroud)

看看,如果这有帮助。