02.08.2010, 15:17
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от KOLANICH
|
не пашед с методом filter
|
Метод filter есть во всех браузерах, кроме IE.
Сообщение от KOLANICH
|
пс как выяснилось , массивов вообще нет, одни объекты (создал массив через new Array, взял тип - объект)
|
Массивы -- это объекты, порождаемые конструктором Array. Они называются массивами. Они есть.
|
|
02.08.2010, 15:22
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от KOLANICH
|
не пашед с методом filter
|
ты мое сообщение читал?
Сообщение от x-yuri
|
В-третьих, массивы фильтруются с помощью метода filter. Здесь сказано, как использовать его кроссбраузерно.
|
Сообщение от KOLANICH
|
пс как выяснилось , массивов вообще нет, одни объекты (создал массив через new Array, взял тип - объект)
|
alert([] instanceof Array);
alert({} instanceof Array);
|
|
02.08.2010, 16:27
|
|
Профессор
|
|
Регистрация: 22.11.2008
Сообщений: 277
|
|
Сообщение от x-yuri
|
Для копирования массивов можно использовать следующую функцию (в частности работает при копировании из HTMLCollection и arguments)
function $A(iterable){
if (iterable.item){
var l = iterable.length, array = new Array(l);
while (l--) array[l] = iterable[l];
return array;
}
return Array.prototype.slice.call(iterable);
};
в результате код будет выглядеть как-то так:
var divs = document.getElementsByTagName('div');
divs = $A(divs).filter(function(el){
return el.style.display != 'none' &&
el.type=="hidden" &&
el.style.zIndex<=-3;
});
|
то есть надо вручную копировать?
тогда проще фильтрацию сразу в копирование вставить
|
|
02.08.2010, 16:33
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от Kolyaj
|
Ну когда как лучше. Если проверка на существование элемента дешевле перестановки кучи элементов, чтобы убрать дырку?
|
как я и думал, в специфических случаях
Сообщение от KOLANICH
|
тогда проще фильтрацию сразу в копирование вставить
|
ну если тебе проще - вставляй
|
|
03.08.2010, 18:04
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от x-yuri
|
var divs = document.getElementsByTagName('div');
divs = $A(divs).filter(function(el){
return el.style.display != 'none' &&
el.type=="hidden" &&
el.style.zIndex<=-3;
});
|
Кстати, лучше так
var divs = document.getElementsByTagName('div');
divs = [].filter.call(divs, function(el){
return el.style.display != 'none' &&
el.type=="hidden" &&
el.style.zIndex<=-3;
});
Тогда будет один проход.
|
|
04.08.2010, 11:45
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
может так ?
for (var divs = document.getElementsByTagName("div"), c = [], i = 0; i < divs.length; i++)
divs[i].style.display != "none" && divs[i].type != "hidden" && divs[i].style.zIndex > -3 && c.push(divs[i]);
divs = c;
|
|
04.08.2010, 11:56
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
рони,
это то же самое, только вместо filter руками цикл записывается.
|
|
04.08.2010, 15:38
|
|
Профессор
|
|
Регистрация: 22.11.2008
Сообщений: 277
|
|
function fakeCheck(els){
var checked=[];
for(var i=0;i<els.length;i++){
if(els[i].style.display!='none'&&els[i].type!="hidden"&&els[i].style.zIndex>=0){
checked.push(els[i]);
}
}
return checked;
}
у меня так
|
|
04.08.2010, 21:44
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
рони, тогда давай уж так, зачем на полпути останавливаться? (алгоритм, кстати, тоже немного поменял)
for(var a=document.getElementsByTagName("div"),b=[],i=a.length-1;i>=0;i--)a[i].style.display!="none"&&a[i].type!="hidden"&&a[i].style.zIndex>-3&&(b[i]=a[i]);
|
|
04.08.2010, 22:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
x-yuri,
гмм массив с дырками от которых вроде уходили ? или я чего не понял?
|
|
|
|