Наследование новых методов
Хочу сделать метод подсчёта потомков первого уровня по тегу
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, время: 20:42. |