Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.02.2013, 21:47
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

как лучше - 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]);
}



первое по стандарту, но длинное; второе нестандартное, но вроде как работает везде и без лишних условий

Последний раз редактировалось dmitry111, 10.02.2013 в 22:00.
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2013, 21:56
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Если текстовые ноды не нужны то children
http://learn.javascript.ru/traversing-dom
Ответить с цитированием
  #3 (permalink)  
Старый 10.02.2013, 22:08
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

vadim5june,

но и первый и второй вариант не отобразит лишнего!
Ответить с цитированием
  #4 (permalink)  
Старый 10.02.2013, 22:25
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

обход children быстрее childNodes в 1.5-3 раза не в ие 6-7
в ие6 в 24
в ие7 в 124
(Николас Закас)
Ответить с цитированием
  #5 (permalink)  
Старый 10.02.2013, 22:47
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

благодарю
Ответить с цитированием
  #6 (permalink)  
Старый 10.02.2013, 23:11
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

В чем разница между этими свойствами? Оба стандартные?
Ответить с цитированием
  #7 (permalink)  
Старый 10.02.2013, 23:50
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

megaupload,

в 6-ом "носороге" сказано что children нестандартный, хотя реализован везде (15.3.2)
Ответить с цитированием
  #8 (permalink)  
Старый 11.02.2013, 00:00
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Подскажите есть ли какой-нибудь более изящный способ вытащить два элемента из 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;


не нравится запись, а исправить не знаю как(

Последний раз редактировалось dmitry111, 11.02.2013 в 00:03.
Ответить с цитированием
  #9 (permalink)  
Старый 11.02.2013, 03:39
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Обьясните тогда почему он работает быстрее? За счет чего?
Ответить с цитированием
  #10 (permalink)  
Старый 11.02.2013, 05:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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;


Только будет искать классы среди всех подомков, не только детей.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше всего заполнить web sql ? Archiolidius Javascript под браузер 1 04.02.2013 10:12
хотел как лучше, а получилось как всегда. Вопрос оптимизации 9xakep Общие вопросы Javascript 13 21.01.2013 17:27
Как определить пользователь сам нажал элемент или при помощи функции click(); finlandia Элементы интерфейса 13 10.01.2013 23:09
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25
Стоит ли пользоваться библиотеками или лучше писать свой код? lancer Общие вопросы Javascript 5 24.03.2008 19:31