Просто о любой Javascript library (Prototype, jQuery, Closure ...) будет сделайте это проще, но если вы хотите сделать это сами:
Вы близки, ваш Javascript должен выглядеть следующим образом:
window.onload = onPageLoad; // Or any of several other similar mechanisms
// (you could just run it at the bottom of the page)
function onPageLoad() {
var node, list, arrValue;
list = [];
for (node = document.getElementById('list').firstChild;
node;
node = node.nextSibling) {
if (node.nodeType == 1 && node.tagName == 'LI') {
list.push(node.innerHTML);
}
}
// `list` now contains the HTML of each LI element under the `ul#list` element
}
Объяснение:
- Перед использованием
document.getElementById
, вы должны быть уверены в том, что DOM готов для вас, чтобы сделать это. Это определенно готово к onload
раз, и есть различные механизмы для запуска вашего кода немного раньше, чем вам нравится (включая установку скрипта в конце).
- Петля начинается с получения первого дочернего элемента элемента
ul#list
, а затем продолжается до тех пор, пока есть другие братья и сестры.
- В цикле мы проверяем, что каждый узел является элементом (
nodeType == 1
) и что его имя тега «LI».
- Если это так, мы извлекаем его HTML и нажимаем на массив.
Я использовал innerHTML
для получения содержимого LI, потому что он широко поддерживается. В качестве альтернативы вы можете использовать innerText
на IE (и некоторые другие) и textContent
на Firefox, но будьте осторожны, что они не делают довольно то же самое (textContent
на Firefox будет включать в себя содержимое тегов script
, например, вероятно, isn это то, что вы хотите).
лучше всего, хотя вложенные списки будут проблемой, если они существуют, поскольку 'getElementsByTagName', конечно, является иерархическим. Почему бы не просто «map (listItems, getText)», хотя? – bobince
@bibince, изменен на 'map (listItems, getText)'. Благодаря! – James