Я пытаюсь просто добавить textNode в <h1>
а затем добавить его в тело в <div id="prob3">
, но я получаю эту ошибку TypeError: bdy.appendChild is not a function
на bdy.appendChild(header);
, Что не так с этим кодом?
Код JavaScript (встроенный в заголовок):
function init()
{
var bdy = document.getElementsByTagName("body");
var header = document.createElement("h1");
var txt = document.createTextNode("Hello World!");
header.appendChild(txt);
bdy.appendChild(header);
}
HTML:
<body onload="init();">
<div id="prob3">
<!--Created TextNode goes Here-->
</div>
</body>
Вы можете просто использовать:
document.body.appendChild(header);
Ваш код не работал, потому что:
var bdy = document.getElementsByTagName("body");
извлекает список элементов, а не один элемент. Вы могли бы использовать:
var bdy = document.getElementsByTagName("body")[0];
чтобы получить первый элемент из списка, но нет смысла делать это так, так как document.body
уже предопределен для вас.
В этом методе вызывается:
var bdy = document.getElementsByTagName("body");
Обратите внимание, что "элементы" являются множественными. Это означает, что, по всей вероятности, он возвращает массивную структуру (в данном случае NodeList). Массивы, естественно, не имеют метода .appendChild
. Вы можете сказать об этом, bdy
в отладчике или, более откровенно, с помощью console.log
-ing.
getElementsByTagName
получает вам NodeList, и вы не можете добавить к нему - сначала вы должны вывести первый элемент этого списка, getElementsByTagName("body")[0].appendChild
.
Но каждый браузер понимает document.body
как ярлык для элемента body.
document.head
,document.title
? Я играю с извлечением вещей вне<body>
.document.title
широко поддерживается.document.head
поддерживается только в IE, начиная с IE9. Вы можете использовать MDN в качестве хорошего справочника для подобных вещей, поскольку он расскажет вам, что поддерживается в каких версиях браузера.