Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 02.08.2010, 15:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от KOLANICH
не пашед с методом filter
Метод filter есть во всех браузерах, кроме IE.

Сообщение от KOLANICH
пс как выяснилось , массивов вообще нет, одни объекты (создал массив через new Array, взял тип - объект)
Массивы -- это объекты, порождаемые конструктором Array. Они называются массивами. Они есть.
Ответить с цитированием
  #12 (permalink)  
Старый 02.08.2010, 15:22
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от KOLANICH
не пашед с методом filter
ты мое сообщение читал?
Сообщение от x-yuri
В-третьих, массивы фильтруются с помощью метода filter. Здесь сказано, как использовать его кроссбраузерно.
Сообщение от KOLANICH
пс как выяснилось , массивов вообще нет, одни объекты (создал массив через new Array, взял тип - объект)
alert([] instanceof Array);
alert({} instanceof Array);
Ответить с цитированием
  #13 (permalink)  
Старый 02.08.2010, 16:27
Аватар для KOLANICH
Профессор
Отправить личное сообщение для KOLANICH Посмотреть профиль Найти все сообщения от KOLANICH
 
Регистрация: 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;
});
то есть надо вручную копировать?
тогда проще фильтрацию сразу в копирование вставить
Ответить с цитированием
  #14 (permalink)  
Старый 02.08.2010, 16:33
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Kolyaj
Ну когда как лучше. Если проверка на существование элемента дешевле перестановки кучи элементов, чтобы убрать дырку?
как я и думал, в специфических случаях

Сообщение от KOLANICH
тогда проще фильтрацию сразу в копирование вставить
ну если тебе проще - вставляй
Ответить с цитированием
  #15 (permalink)  
Старый 03.08.2010, 18:04
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 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;
});


Тогда будет один проход.
Ответить с цитированием
  #16 (permalink)  
Старый 04.08.2010, 11:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

может так ?
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;
Ответить с цитированием
  #17 (permalink)  
Старый 04.08.2010, 11:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

рони,
это то же самое, только вместо filter руками цикл записывается.
Ответить с цитированием
  #18 (permalink)  
Старый 04.08.2010, 15:38
Аватар для KOLANICH
Профессор
Отправить личное сообщение для KOLANICH Посмотреть профиль Найти все сообщения от KOLANICH
 
Регистрация: 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;
	}

у меня так
Ответить с цитированием
  #19 (permalink)  
Старый 04.08.2010, 21:44
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 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]);
Ответить с цитированием
  #20 (permalink)  
Старый 04.08.2010, 22:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

x-yuri,
гмм массив с дырками от которых вроде уходили ? или я чего не понял?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Специфические функции и свойства различных браузеров onejsquestion Javascript под браузер 3 28.06.2010 10:54
Переменная как значение функции. Jurasmi Общие вопросы Javascript 7 22.04.2010 12:45
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03
Возвращение значения из функции dba Events/DOM/Window 21 06.10.2009 01:33
владелец функции diagnost Общие вопросы Javascript 6 30.10.2008 15:04