有很多方法可以改变标题,主要的两种,是这样的:
可疑的方法
在 HTML 中添加一个标题标签(例如<title>Hello</title>),然后在 javascript 中:
let title_el = document.querySelector("title");
if(title_el)
title_el.innerHTML = "World";
明显正确的方法
最简单的就是实际使用文档对象模型(DOM)提供的方法
document.title = "Hello World";
前一种方法通常用于更改文档正文中的标签。使用这种方法来修改元数据标签,如在头部中发现的那些(如title)充其量是有问题的做法,不是惯用的,一开始就不是很好的风格,甚至可能不适合移植。不过,您可以确定的一件事是,如果其他开发人员在他们维护的代码中看到 title.innerHTML = ...,这会惹恼他们。
您想要采用的是后一种方法。该属性是provided in the DOM Specification,顾名思义,专门用于更改标题。
还请注意,如果您正在使用 XUL,您可能需要在尝试设置或获取标题之前检查文档是否已加载,否则您将调用 undefined behavior(这里是 dragons),这很可怕概念本身。这可能会也可能不会通过 JavaScript 发生,因为 DOM 上的文档不一定与 JavaScript 相关。但 XUL 完全是“另一种野兽”,所以我离题了。
说到.innerHTML
要记住的一些好建议是,使用.innerHTML 通常是草率的。请改用appendChild。
虽然我仍然认为.innerHTML 有用的两种情况包括将纯文本插入到一个小元素中......
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;
}());
...清理一个容器...
container.innerHTML = "";
// as opposed to... umm... okay, I guess I'm rolling my own
[...container.childNodes].forEach(function(child){
container.removeChild(child);
});