Ответ 1
Это самый быстрый и простой способ, и он работает во всех браузерах:
myDiv.getElementsByTagName("*")
Я хочу сканировать div для всех дочернихNodes, включая те, которые расположены внутри других элементов. Прямо сейчас у меня есть это:
var t = document.getElementById('DivId').childNodes;
for(i=0; i<t.length; i++) alert(t[i].id);
Но он получает детей только от Div, а не от внуков. Спасибо!
Изменить: этот вопрос был слишком расплывчатым. Извини за это. Здесь скрипка:
Body.onload script не запускается в JSFiddle, но он работает, за исключением того, что поля ввода "Me Second" и "Me Third" не назначаются tabIndex и поэтому пропускаются.
Это самый быстрый и простой способ, и он работает во всех браузерах:
myDiv.getElementsByTagName("*")
Если вы ищете все HTMLElement
в современных браузерах, вы можете использовать:
myDiv.querySelectorAll("*")
Как насчет правнуков?
Чтобы сделать сколь угодно глубоким, вы можете использовать рекурсивную функцию.
var alldescendants = [];
var t = document.getElementById('DivId').childNodes;
for(i = 0; i < t.length; i++)
if (t[i].nodeType == 1)
recurseAndAdd(t[i], alldescendants);
function recurseAndAdd(el, descendants) {
descendants.push(el.id);
var children = el.childNodes;
for(i=0; i < children.length; i++) {
if (children[i].nodeType == 1) {
recurseAndAdd(children[i]);
}
}
}
Если вы действительно хотите внуков, тогда вы можете вынуть рекурсию (и, вероятно, переименовать функцию)
function recurseAndAdd(el, descendants) {
descendants.push(el.id);
var children = el.childNodes;
for(i=0; i < children.length; i++) {
if (children[i].nodeType == 1) {
descendants.push(children[i].id);
}
}
}