Існує багато способів змінити назву, основні два:
Сумнівний метод
Помістіть тег заголовка в 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 = ...
код, який вони підтримують.
Те, що ви хочете піти, це останній метод. Ця властивість надається в специфікації DOM спеціально для того, щоб, як випливає з назви, змінити назву.
Зауважте також, що якщо ви працюєте з XUL, ви, можливо, захочете перевірити, чи завантажився документ, перш ніж намагатися встановити або отримати заголовок, так як в іншому випадку ви посилаєтесь undefined behavior
(тут будуть дракони), що саме по собі є страшною концепцією. Це може статися або не відбуватися через 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);
});