Пытаюсь написать метод, с помощью которого можно будет получить прямых потомков по имени тэга.
Всех потомков найти не проблема, а проблема как раз таки в NodeList - в JavaScript нельзя создавать свой NodeList/HTMLCollection.
Пока вот до чего додумался:
Element.prototype.getChilds = function(tagName) {
var childs = this.children,
nodeList = null;
if(!tagName || tagName == '*') {
nodeList = childs;
}
else {
var l = childs.length;
if(l) {
var i, tempID = 't' + Math.floor(Math.random() * 9E10).toString(32);
for(i = 0; i < l; i++) {
if(childs[i].tagName == tagName.toUpperCase()) {
childs[i].setAttribute(tempID, '');
}
}
nodeList = document.querySelectorAll('[' + tempID + ']');
if(nodeList) {
nodeList.each(Element.prototype.removeAttribute.bind(nodeList, tempID));
/*nodeList.each(function() {
this.removeAttribute(tempID);
});*/
}
}
}
}
В принципе, всё работает как нужно. Но может у кого-нибудь есть идеи более элегантного решения задачи? А то мало ли, вдруг что-то упустил.
Для тех, кто не понял: мне нужно получить NodeList/HTMLCollection элементов, а не массив.
_________________
Пока писал пост, придумал такое решение
Element.prototype.getChilds = function(tagName) {
var childs = this.children, nodeList,
tempID = 't' + Math.floor(Math.random() * 9E10).toString(32);
this.setAttribute(tempID, '');
nodeList = this.parentNode.querySelectorAll('[' + tempID + '] > ' + (tagName || '*'));
this.removeAttribute(tempID);
return nodeList;
}