Получить список родительских элементов
Нужно написать функцию 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; }; При попытке отфильтровать возвращает пустой массив, почему? |
все работает. может у вас на элементах навешано более одного класса, и поэтому они не попадают в итоговый массив?
<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> |
Ну класс я для примера привёл. Вся проблема оказалась в том, что я прописывал tagName в нижнем регистре. Спасибо за наводку.
|
значит внимательней следите за ф-цией фильтраци.
выводиде в консоль фаербага, сопутсвующие условия, и смотрите что не так |
Часовой пояс GMT +3, время: 11:17. |