Вы можете сделать это так:
var list = document.getElementById("foo").getElementsByClassName("bar");
if (list && list.length > 0) {
list[0].innerHTML = "Goodbye world!";
}
или, если вы хотите сделать это с меньшей проверкой ошибок и большей краткостью, это можно сделать в одну строку следующим образом:
document.getElementById("foo").getElementsByClassName("bar")[0].innerHTML = "Goodbye world!";
По объяснению:
- Вы получаете элемент с
id="foo"
.
- Затем вы найдете объекты, которые содержатся в этом объекте, которые имеют
class="bar"
.
- Это возвращает массив-подобный nodeList, так что вы ссылаетесь на первый элемент в этом nodeList
- Затем вы можете установить
innerHTML
этот элемент, чтобы изменить его содержимое.
Предостережения: некоторые старые браузеры не поддерживают getElementsByClassName
(например, старые версии IE). Эта функция может быть вставлена на место, если она отсутствует.
Именно здесь я рекомендую использовать библиотеку, которая имеет встроенную поддержку селектора CSS3, а не беспокоиться о совместимости браузера самостоятельно (пусть кто-то другой сделает всю работу). Если вам нужна библиотека, то Sizzle будет отлично работать. В Sizzle это будет сделано так:
Sizzle("#foo .bar")[0].innerHTML = "Goodbye world!";
jQuery имеет встроенную библиотеку Sizzle, а в jQuery это будет:
$("#foo .bar").html("Goodbye world!");
document.getElementsByClassName
будет работать нормально.