如何在dom元素中添加扩展方法

时间:2017-05-08 04:13:36

标签: javascript dom

我有这样的元素

    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元素?

感谢。

2 个答案:

答案 0 :(得分:2)

像这样,元素继承自Element

Element.prototype.myExtensionMethod = function() {
    console.log("myExtensionMethod!", this);
};

不建议使用"浏览器" - 更好的方法是使用某种包装对象来保存对元素的引用,并使用扩展方法,这样就可以保留元素""通过各种浏览器,你仍然可以参考它们。它没有以前那么糟糕

答案 1 :(得分:2)

您正在考虑分别添加HTMLElementNodeList原型。

例如



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;
&#13;
&#13;