Można to zrobić tak:
var list = document.getElementById("foo").getElementsByClassName("bar");
if (list && list.length > 0) {
list[0].innerHTML = "Goodbye world!";
}
lub, jeśli chcesz to zrobić z mniej sprawdzania błędów i większej zwięzłości, można to zrobić w jednej linii tak:
document.getElementById("foo").getElementsByClassName("bar")[0].innerHTML = "Goodbye world!";
W wyjaśnieniem:
- uzyskać element z
id="foo"
.
- Następnie można znaleźć obiekty, które są zawarte w tym obiekcie, które mają
class="bar"
.
- Zwraca podobną do tablicowej nodeList, więc odwołujesz się do pierwszej pozycji w tej liście węzłowej
- Możesz następnie ustawić
innerHTML
tego elementu, aby zmienić jego zawartość.
Ostrzeżenia: niektóre starsze przeglądarki nie obsługują getElementsByClassName
(np. Starsze wersje IE). Funkcję tę można umieścić w miejscu, jeśli jej brakuje.
To gdzie ja zalecamy użycie biblioteki, która ma wbudowaną obsługę selektora CSS3 zamiast martwić się o kompatybilność przeglądarki siebie (niech ktoś inny zrobi całą pracę). Jeśli chcesz, żeby to zrobiła biblioteka, Sizzle będzie działać świetnie. W Sizzle, byłoby to być zrobione tak:
Sizzle("#foo .bar")[0].innerHTML = "Goodbye world!";
jQuery ma bibliotekę Sizzle wbudowane i w jQuery, byłoby to:
$("#foo .bar").html("Goodbye world!");
Uzyskanie statusu rodzica według identyfikatora nie jest w tym przypadku konieczne. "document.getElementsByClassName" działałoby poprawnie. – rvighne
@rvighne dokładne wymagania OP było to, że "chciałby uzyskać bardziej szczegółowe". Osoba zadająca pytanie zastanawiała się, w jaki sposób może być bardziej konkretny w swoim przemierzaniu drzewa DOM. Używanie getElementByClassName nie było punktem dezorientacji, ale widzę, jak ktoś mógłby łatwo pomyśleć, że wskazywałam oba w razie potrzeby. Oni nie są. Jeśli chcesz kierować tylko na elementy określonej klasy, które znajdują się pod określonym węzłem o danym ID, w przeciwieństwie do elementów tej samej klasy pod innym węzłem, użyjesz tego. –
@JosephMarikle Rozumiem. Uważam, że zbyt szybko przeczytałem to pytanie. – rvighne