#javascript #html #dom #createelement
#javascript #HTML #dom #createelement
Вопрос:
Я пишу простую программу на JavaScript для проверки каждого элемента на веб-сайте HTML и добавления дочернего узла к каждому нетекстовому узлу, который помечает тип тега:
Вот мой код:
window.onload = function() {
var body_elems = document.body.getElementsByTagName("*");
for (var i = 0; i < body_elems.length; i ) {
if (body_elems[i].nodeType != 3) {
var tag_name = body_elems[i].tagName;
var child = document.createElement("P");
var child_text = document.createTextNode(tag_name);
child.appendChild(child_text);
body_elems[i].appendChild(child);
body_elems[i].firstChild.className = "hoverNode";
}
}
}
По какой-то причине строка var child = document.createElement("P")
приводит к тому, что страница никогда не загружается; если я закомментирую эту строку, страница загрузится.
С другой стороны, вот немного другая версия, которая действительно работает:
window.onload = function() {
var body_elems = document.body.getElementsByTagName("*");
for (var i = 0; i < body_elems.length; i ) {
if (body_elems[i].nodeType != 3) {
var tag_name = body_elems[i].tagName;
var child = document.createTextNode(tag_name);
body_elems[i].appendChild(child);
child.className="hoverNode";
}
}
}
Но я не могу понять, как присвоить имя класса новому узлу, чтобы применить CSS, поэтому, если бы кто-нибудь мог сказать мне, как это сделать, моя проблема была бы решена.
Я новичок в JS, поэтому буду признателен за любую помощь.
Комментарии:
1. Я думаю, document.createElement(«p»); будет работать (в нижнем регистре).
2. Зарегистрирована ли ошибка? Обратите внимание, что есть некоторые теги (например
<img>
, или<br>
), у которых не может быть дочерних узлов.3. Если в документе есть хотя бы один узел, который не является TextNode, то первый скрипт будет выполняться вечно, поскольку
document.getElementsByTagName()
возвращает текущую коллекцию, следовательноbody_elems
, также будет содержать вновь созданныеp
элементы.4. Используйте
document.querySelectorAll("*")
вместо этого. Это вернет неживой список узлов.5. Диапазон также не может находиться внутри определенных элементов… Вам нужно будет добавить ее после элемента.