Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выборка по className, проблема в Firefox (https://javascript.ru/forum/events/51795-vyborka-po-classname-problema-v-firefox.html)

alekseylovchikov 20.11.2014 10:27

Выборка по className, проблема в Firefox
 
Приветствую! Столкнулся с такой проблемой, значит я делаю выборку всех элементов по определенному классу.

var getSection = document.getElementsByClassName('className');


потом в массив

for(var idSection in getSection) {
    categoryList[i] = idSection;
    i++;
}


И дальше происходит, то что я не понимаю.

В браузерах IE, Chrome, Opera выводит нужные мне идентификаторы в этих классах, а вот в Firefox их почему то нет. В чем проблема?

ksa 20.11.2014 10:32

Цитата:

Сообщение от alekseylovchikov
В чем проблема?

Вот тут бы и тестовый пример непомешал бы...

alekseylovchikov 20.11.2014 10:40

Цитата:

Сообщение от ksa (Сообщение 341860)
Вот тут бы и тестовый пример непомешал бы...

http://webdevshow.hol.es/test.html
Вывод в console.log

В Chrome, например, видно вывод id category1, category2, category3, в то время как в Fiefox их нет.

danik.js 20.11.2014 10:55

Цитата:

Сообщение от alekseylovchikov
for(var idSection in getSection)

Это нельзя использовать для обхода массива и массивоподобных объектов

alekseylovchikov 20.11.2014 11:04

Цитата:

Сообщение от danik.js (Сообщение 341864)
Это нельзя использовать для обхода массива и массивоподобных объектов

Спасибо! Переделал.

kostyanet 20.11.2014 21:09

Наоборот. Это можно использовать, когда вы знаете что это можно использовать. Например сами объект сделали - сами знаете что в прототипы никто не наклал, - значит можно. В остальных случаях обход пней и корят зохавает краткость такого loop'а в два счета.

devote 21.11.2014 10:39

Цитата:

Сообщение от kostyanet
Наоборот. Это можно использовать

Я бы сказал разрешено при необходимости. Причины ясны, если нужно перебрать массив в котором есть добавленные вами свойства которые так же нужно обработать. В иных случаях для массива и других коллекций все же более рекомендуется использовать loop с индексом for(var i =0; i < arr.length; i++), одна из важных причин это производительность, она по индексу будет в разы лучшее, нежели перебор хешей в объекте.

devote 21.11.2014 10:44

Цитата:

Сообщение от alekseylovchikov
for(var idSection in getSection) {
    categoryList[i] = idSection;
    i++;
}

В твоем же случае перевод HTML-коллекции в массив можно осуществить более простым способом:
categoryList = Array.prototype.slice.call(getSection);
но это не будет работать в ИЕ8

danik.js 21.11.2014 14:08

Цитата:

Сообщение от devote
более простым способом

Array.apply(null, getSection) ... ммм?
IE8+ ;)

devote 21.11.2014 14:34

Цитата:

Сообщение от danik.js
Array.apply(null, getSection) ... ммм?

во точно, и в ИЕ8 работает)))


Часовой пояс GMT +3, время: 02:11.