| 
	| 
	
	| 
		
	| 
			
			 
			
				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,150
					 
		
 |  |  
	| может так ? 
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,150
					 
		
 |  |  
	| x-yuri,гмм массив с дырками от которых вроде уходили ? или я чего не понял?
 |  |  |  |