Не используйте innerHTML, это ненадежный запатентованный метод Microsoft; если вы привыкнете использовать его, у вас сразу же начнутся проблемы, если вы начнете кодировать на уровне приложения и не сможете понять, почему. Вместо этого придерживайтесь спецификации DOM.
Пример, который вы, очевидно, можете добавить в цикл ...
document.getElementById('subDivClass').getElementsByTagName('h2').firstChild.nodeValue
.parentNode - Родительский элемент элемента, на который имеется ссылка.
.parentNode.parentNode.parentNode - Вы можете использовать это столько, сколько хотите, чтобы подняться или обойти DOM.
.childNodes [0] - Индекс дочерних элементов, НЕ содержит ссылки на текстовые узлы ПОСЛЕ элемента (для этого используйте treewalker).
.nodeValue - текстовое значение узла, НЕ используйте innerHTML.
.textContent - Получает или задает текст элемента (но не дочерних элементов); немного проще, чем nodeValue
, хотя все еще имеет разумные ограничения.
.previousSibling - Элемент ДО элемента ссылки, а не дочерний элемент / родитель.
.nextSibling - Элемент ПОСЛЕ ссылочного элемента, а не дочерний / родительский.
Вы можете раскрыть все объекты (например, методы, свойства и другие объекты) для любого объекта, используя оператор in, чтобы узнать, что еще доступно для вас ...
for (i in document.getElementById('mainDiv')) {alert('i = '+i);}
Следует отметить, что если вы застряли с использованием синтаксического анализатора HTML, .nodeName
будет все в верхнем регистре (например, старый способ Internet Explorer) по сравнению с использованием синтаксического анализатора XML (application / xhtml + xml), .nodeName
будет работать правильно вернуть имя элемента в нижнем регистре (если вы действительно не в стиле 90-х или что-то в этом роде).
Следует также отметить, что когда вы используете previousSibling
и nextSibling
, одни только разрывы строк создадут textNode
, и эти разрывы строк будут мешать CSS (установка font-size
в 5px обычно устраняет это) .