как лучше - parent.childNodes или parent.children
Что лучше использовать:
var childs = parent.childNodes;
for (var i = 0, len = childs.length; i < len; i += 1) {
if (childs[i].nodeType === 1) {
console.log(childs[i]);
}
}
или
var childs = parent.children;
for (var i = 0, len = childs.length; i < len; i += 1) {
console.log(childs[i]);
}
первое по стандарту, но длинное; второе нестандартное, но вроде как работает везде и без лишних условий |
Если текстовые ноды не нужны то children
http://learn.javascript.ru/traversing-dom |
vadim5june,
но и первый и второй вариант не отобразит лишнего! |
обход children быстрее childNodes в 1.5-3 раза не в ие 6-7
в ие6 в 24 в ие7 в 124 (Николас Закас) |
благодарю
|
В чем разница между этими свойствами? Оба стандартные?
|
megaupload,
в 6-ом "носороге" сказано что children нестандартный, хотя реализован везде (15.3.2) |
Подскажите есть ли какой-нибудь более изящный способ вытащить два элемента из node-листа по классу и создать из них свойство объекта:
// ищет два элемент по их классу. Из значений этих элементов создается свойство объекта:
var childs = xxx.children,
obj = {},
i, len, elem1, elem2;
for (i = 0, len = childs; i < len; i += 1) {
if (childs[i].className === "class1") {
elem1 = childs[i].innerHTML;
}
if (childs[i].className === "class2") {
elem2 = childs[i].innerHTML;
}
}
obj[elem1] = elem2;
не нравится запись, а исправить не знаю как( |
Обьясните тогда почему он работает быстрее? За счет чего?
|
var childs = xxx.children,
obj = {},
i, len, elem1, elem2;
if (elem1 = xxx.querySelector('.class1'))
elem1 = elem1.innerHTML;
if (elem2 = xxx.querySelector('.class2'))
elem2 = elem2.innerHTML;
}
obj[elem1] = elem2;
Только будет искать классы среди всех подомков, не только детей. |
Цитата:
danik.js, спасибо |
dmitry111, код можно огранизовать ввиде цикла, если элементов больше двух.
|
danik.js,
или использовать elem.querySelectorAll(selector); Цикл слишком затратен! |
| Часовой пояс GMT +3, время: 22:26. |