После getElementById getElementByClass не связывается с DOM

У меня проблема со странным поведением в JavaScript, которое я не понимаю:

Если я получу элемент (например, строку в таблице), как это:

var someElement = document.getElementById("row1");

А затем попробуйте найти элемент за классом из этого элемента (например, столбец) и изменить innerHTML, ничего не происходит:

someElement.getElementsByClassName("column1").innerHTML = "new text";

Но если я вместо этого сделаю это:

someElement.childNodes[0].innerHTML= "new text";

Элементы innerHTML изменяются и отображаются в DOM. Почему это происходит так? Я думаю, что классная вещь создаст для меня более чистый код прямо сейчас, так есть ли способ заставить метод класса работать так, как я думаю?

Я использую новейшую версию Chrome.

2 ответа

Здесь нет getElementByClassName() должно быть getElementsByClassName() (Обратите внимание s в конце elements,

Но главная проблема возникает, когда вы пытаетесь вызвать свойство объекта innerHTML на результат getElementsByClassName() которые возвращают массивоподобный объект всех дочерних элементов, которые имеют все заданные имена классов.

Во всяком случае, я предлагаю использовать querySelector() или же querySelectorAll() вместо этого, как:

someElement.querySelector(".column1").innerHTML = "new text";
//Or
someElement.querySelectorAll(".column1")[0].innerHTML = "new text";

В противном случае вы можете просто указать на первый элемент возвращаемого результата, например:

someElement.getElementsByClassName("column1")[0].innerHTML = "new text";

Дело в том, что идентификатор уникален, класс может использоваться на нескольких элементах, поэтому функция называется getElementsByClassName, обратите внимание на S в элементах, чтобы изменить что-либо с классом, вы должны пройти через цикл, так что вы можете использовать это, например,

    var a = document.getElementsByClassName("example"); 

    for( let i = 0; i< a.length;i++)
         a[i].style.top = "50px";

Обратите внимание: это только пример, используйте ваш innerhtml или все, что вам нужно

Другие вопросы по тегам