我对我不理解的 JavaScript 中的奇怪行为有疑问:
如果我像这样获取元素(例如表格中的一行):
var someElement = document.getElementById("row1");
然后尝试从该元素(例如列)中按类查找元素并更改 innerHTML,没有任何反应:
someElement.getElementsByClassName("column1").innerHTML = "new text";
但如果我改为这样做:
someElement.childNodes[0].innerHTML= "new text";
元素 innerHTML 发生变化并且在 DOM 上可见。为什么会这样?我认为类的东西现在会为我生成更清晰的代码,那么有没有办法让类方法像我认为的那样工作?
我使用的是最新版本的 Chrome。
没有getElementByClassName()
应该是getElementsByClassName()
(注意elements
末尾的s
>.
但主要问题是当您尝试在 getElementsByClassName()
的结果上调用对象 innerHTML
的属性时,它返回所有元素的类数组对象具有所有给定类名的子元素。
无论如何,我建议使用 querySelector()
或 querySelectorAll()
而不是:
someElement.querySelector(".column1").innerHTML = "new text";
//Or
someElement.querySelectorAll(".column1")[0].innerHTML = "new text";
否则你可以只指向返回结果的第一个元素,如:
someElement.getElementsByClassName("column1")[0].innerHTML = "new text";