Наследование новых методов
Хочу сделать метод подсчёта потомков первого уровня по тегу
window.document.getChildElementsByTagName = function (tagName) { var A=[]; for (var i=0; i<this.childNodes.length; ++i) if (this.childNodes[i].tagName==tagName) { A.push(this.childNodes[i]); } return A; }; window.alert(window.document.getChildElementsByTagName("HTML").length); - работает. Но если вызывать window.document.body.getChildElementsByTagName("DIV").length то не работает. Возможно ли в JS наследование методов? Связано ли это с инстанцированием? |
Цитата:
|
function getChildElementsByTagName ( element, tagName ) { var children = []; tagName = tagName && tagName.toLowerCase(); for ( var child = element.firstChild; child; child = child.nextSibling ) { if ( child.nodeType === 1 && (!tagName || child.nodeName.toLowerCase() === tagName) ) { children.push( child ); } } return children; } alert(getChildElementsByTagName( document, 'html' ).length) alert(getChildElementsByTagName( document.body, 'div' ).length) |
nikita.mmf, спасибо, практически так и сделал
function getChildElementsByTagName(pt,tagName) { var A=[]; for (var i=0; i<pt.childNodes.length; ++i) if (pt.childNodes[i].tagName==tagName) { A.push(pt[i]); } return A; } только чуть меньше занудства с проверками ;) Вопрос - можно ли динамически приляпать объекту метод так, чтоб он стал доступен потомкам, которые инстанцированы раньше? |
можно
"use strict"; function Parent() {} // наследуем var child = Object.create( Parent.prototype ); // приляпываем Parent.prototype.method = function() { return "works fine" ; }; // ок alert( child.method() ); |
Цитата:
|
Цитата:
|
Вообще, можно сделать так:
Node.prototype.getChildElementsByTagName = function (tagName) { var A=[]; for (var i=0; i<this.childNodes.length; ++i) if (this.childNodes[i].tagName==tagName) { A.push(this.childNodes[i]); } return A; };Но это, конечно, не кроссбраузерно. |
Цитата:
var elems = document.querySelectorAll('#test > *'); |
BallsShaped, спасибо работает.
Я пытался поставить на window, window.document, window.documentElement и window.body, но в консоли было сообщение, что prototype для них не определён. |
Часовой пояс GMT +3, время: 19:31. |