Có nhiều cách bạn có thể thay đổi tiêu đề, hai cách chính, giống như vậy:
Phương pháp nghi vấn
Đặt thẻ tiêu đề trong HTML (ví dụ <title>Hello</title>
), sau đó trong javascript:
let title_el = document.querySelector("title");
if(title_el)
title_el.innerHTML = "World";
Phương pháp đúng
Đơn giản nhất trong tất cả là thực sự sử dụng phương thức được cung cấp bởi Mô hình đối tượng tài liệu (DOM)
document.title = "Hello World";
Phương pháp trước đây thường là những gì bạn sẽ làm để thay đổi các thẻ được tìm thấy trong phần thân của tài liệu. Sử dụng phương pháp này để sửa đổi các thẻ dữ liệu meta giống như các thẻ được tìm thấy trong đầu (như title
) là cách thực hành tốt nhất, không phải là thành ngữ, phong cách không tốt để bắt đầu và thậm chí có thể không di động. Tuy nhiên, một điều bạn có thể chắc chắn là nó sẽ gây khó chịu cho các nhà phát triển khác nếu họ thấytitle.innerHTML = ...
trong mã họ đang duy trì.
Những gì bạn muốn đi với là phương pháp sau. Thuộc tính này được cung cấp trong Đặc tả DOM cụ thể cho mục đích, như tên cho thấy, thay đổi tiêu đề.
Cũng lưu ý rằng nếu bạn đang làm việc với XUL, bạn có thể muốn kiểm tra xem tài liệu đã được tải trước khi thử đặt hoặc lấy tiêu đề chưa, nếu không bạn đang gọi undefined behavior
(ở đây là rồng), đây là một khái niệm đáng sợ. Điều này có thể hoặc không thể xảy ra thông qua JavaScript, vì các tài liệu trên DOM không nhất thiết phải liên quan đến JavaScript. Nhưng XUL là một con thú hoàn toàn, nên tôi lạc đề.
Nói về .innerHTML
Một số lời khuyên tốt để ghi nhớ sẽ là việc sử dụng .innerHTML
nói chung là cẩu thả. Sử dụng appendChild
thay thế.
Mặc dù hai trường hợp mà tôi vẫn thấy .innerHTML
hữu ích bao gồm chèn văn bản đơn giản vào một yếu tố nhỏ ...
label.innerHTML = "Hello World";
// as opposed to...
label.appendChild(document.createTextNode("Hello World"));
// example:
el.appendChild(function(){
let el = document.createElement("span");
el.className = "label";
el.innerHTML = label_text;
return el;
}());
... và dọn sạch một container ...
container.innerHTML = "";
// as opposed to... umm... okay, I guess I'm rolling my own
[...container.childNodes].forEach(function(child){
container.removeChild(child);
});