Bạn có thể làm điều đó như thế này:
var list = document.getElementById("foo").getElementsByClassName("bar");
if (list && list.length > 0) {
list[0].innerHTML = "Goodbye world!";
}
hoặc, nếu bạn muốn làm điều đó với với kiểm tra lỗi ít hơn và ngắn gọn hơn, nó có thể được thực hiện trong một dòng như thế này:
document.getElementById("foo").getElementsByClassName("bar")[0].innerHTML = "Goodbye world!";
Giải thích:
- Bạn nhận phần tử với
id="foo"
.
- Sau đó, bạn tìm thấy các đối tượng được chứa trong đối tượng đó có
class="bar"
.
- Điều đó trả về một danh sách nút giống như mảng, vì vậy bạn tham chiếu mục đầu tiên trong nút đó
- Bạn có thể đặt
innerHTML
của mục đó để thay đổi nội dung của nó.
Cẩn thận: một số trình duyệt cũ không hỗ trợ getElementsByClassName
(ví dụ: phiên bản cũ hơn của IE). Chức năng đó có thể được shimmed vào vị trí nếu thiếu.
Đây là nơi tôi khuyên bạn nên sử dụng thư viện có hỗ trợ bộ chọn CSS3 tích hợp hơn là lo lắng về khả năng tương thích của trình duyệt (cho phép người khác làm tất cả công việc). Nếu bạn muốn chỉ là một thư viện để làm điều đó, thì Sizzle sẽ làm việc tuyệt vời. Trong sizzle, điều này sẽ được thực hiện như thế này:
Sizzle("#foo .bar")[0].innerHTML = "Goodbye world!";
jQuery có thư viện sizzle built-in và trong jQuery, đây sẽ là:
$("#foo .bar").html("Goodbye world!");
Nhận cha mẹ bằng ID là không cần thiết trong trường hợp này. 'document.getElementsByClassName' sẽ hoạt động tốt. – rvighne
@rvighne các yêu cầu chính xác của OP là ông "muốn được cụ thể hơn". Người hỏi câu hỏi đã hỏi làm thế nào anh ta có thể cụ thể hơn trong quá trình duyệt cây DOM của mình. Việc sử dụng getElementByClassName không phải là một điểm của sự nhầm lẫn, nhưng tôi có thể thấy làm thế nào ai đó có thể dễ dàng nghĩ rằng tôi đã chỉ ra cả khi cần thiết. Họ không phải. Nếu bạn muốn chỉ nhắm mục tiêu các phần tử của một lớp nhất định nằm dưới một nút cụ thể của một ID nhất định chứ không phải các phần tử của cùng một lớp đó dưới một nút khác, thì đây là những gì bạn sẽ sử dụng. –
@JosephMarikle Tôi hiểu rồi. Tôi tin rằng tôi đã đọc câu hỏi quá nhanh. – rvighne