我有这样的元素
var elem = document.getElementById('my-element');
或
var elems = document.querySelector('.all-elements-with-this-class');
我想要做的就是这个
elem.myExtensionMethod();
或
elems.myExtensionMethod();
正如我想象的那样,我的扩展方法可能会以这种方式实现
var myExtensionMethod = function() {
this.classList.add('add-this-class-to-all');
}
如何在javascript中扩展dom元素?
感谢。
答案 0 :(得分:2)
像这样,元素继承自Element
Element.prototype.myExtensionMethod = function() {
console.log("myExtensionMethod!", this);
};
不建议使用"浏览器" - 更好的方法是使用某种包装对象来保存对元素的引用,并使用扩展方法,这样就可以保留元素""通过各种浏览器,你仍然可以参考它们。它没有以前那么糟糕
答案 1 :(得分:2)
您正在考虑分别添加HTMLElement
和NodeList
原型。
例如
HTMLElement.prototype.myExtensionMethod = function() {
this.classList.add('add-this-class-to-all');
}
NodeList.prototype.myExtensionMethod = function() {
this.forEach(el => el.myExtensionMethod())
}
document.getElementById('p1').myExtensionMethod()
document.querySelectorAll('li').myExtensionMethod();

.add-this-class-to-all {
background-color: red;
color: white;
}
.add-this-class-to-all:after {
content: " but now it's red!"
}

<p id="p1">This is a plain old paragraph</p>
<ul>
<li>List #1</li>
<li>List #2</li>
</ul>
&#13;