Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.06.2010, 10:10
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Получить список родительских элементов
Нужно написать функцию getParents, которая будет возвращать список всех родительских элементов и при надобности фильтровать их таким образом:

Element.getParents(function (a) {
	return a.className == 'myClass'; // Выбираем только элементы с классом myClass
});


Вот код функции:

Object.prototype.getParents = function (exception) {
	var tmp = [], r = (this instanceof Array ? this[0] : this).parentNode;
	while(r.parentNode) {
		tmp.push(r),
		r = r.parentNode;
	}
	if (exception) {
		var x = [];
		for (var i = 0; i < tmp.length; i++) {
			if (exception(tmp[i])) {
				x.push(tmp[i]);
			}
		}
		tmp = x;
	}
	return tmp;
};


При попытке отфильтровать возвращает пустой массив, почему?
Ответить с цитированием
  #2 (permalink)  
Старый 20.06.2010, 10:32
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

все работает. может у вас на элементах навешано более одного класса, и поэтому они не попадают в итоговый массив?
<html>
<head>
<script type="text/javascript">
window.onload=function(){
Object.prototype.getParents = function (exception) {
	var tmp = [], r = (this instanceof Array ? this[0] : this).parentNode;
	while(r.parentNode) {
		tmp.push(r),
		r = r.parentNode;
	}
	if (exception) {
		var x = [];
		for (var i = 0; i < tmp.length; i++) {
			if (exception(tmp[i])) {
				x.push(tmp[i]);
			}
		}
		tmp = x;
	}
	return tmp;
};
var q=document.getElementById('q').getParents(function (a) { 
    return a.tagName == 'BODY'; // Выбираем только элементы с классом myClass 
});
alert(q);
}
</script>
</head>
<body>
<div id="q" ></div>


</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 20.06.2010, 10:44
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Ну класс я для примера привёл. Вся проблема оказалась в том, что я прописывал tagName в нижнем регистре. Спасибо за наводку.
Ответить с цитированием
  #4 (permalink)  
Старый 20.06.2010, 11:00
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

значит внимательней следите за ф-цией фильтраци.
выводиде в консоль фаербага, сопутсвующие условия, и смотрите что не так
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить список элементов в localStorage? Бобр Общие вопросы Javascript 8 17.09.2013 14:32
Как прочитать список имён элементов в Cookie? Бобр Общие вопросы Javascript 6 09.02.2010 08:47
jQuery:как получить список файлов в директории Chaos Lord jQuery 4 30.11.2009 19:55
Как получить список всех установленных плагинов VitAngel Internet Explorer 0 15.07.2009 09:13
Получить список всех доступных методов Bseagate Общие вопросы Javascript 3 17.11.2008 13:38