如果你想在DOM中我想扩展一些组或类,但我不希望扩展所有的元素。有可能吗?
例如:
document.getElementsByClass('extended').myMethod(); // working
BUT
document.getElementById('elementNotExtendedClass').myMethod(); // shouldnt be working
因为我不想弄乱所有元素,只选择所选元素。 也许它应该通过在文档中创建我自己的createElement()方法版本来完成。例如document.CreateMyElement()。
还是有什么想法?感谢
编辑6月06日: 我正在寻找原型链保持工作的解决方案,因此我可以立即更改一些共享方法和属性。
答案 0 :(得分:2)
为什么不将方法添加到每个实例(fiddle)
function test() {
this.style.fontWeight = "bold";
}
window.onload = function(){
// add your method to existing elements with class 'extended'
var elements = document.getElementsByClassName('extended');
for (var i = 0; i < elements.length; i++){
elements[i].test = test;
}
// just to visualize what happened...
var spans = document.getElementsByTagName("span");
alert("span[0].test: " + typeof spans[0].test
+"\nspan[1].test: " + typeof spans[1].test);
spans[0].test();
};
答案 1 :(得分:0)
<强>更新强>
此方法将定义一个全局接口,您可以在其上定义扩展方法。将它们放在这样的界面中允许您更改方法而无需重新应用它。
MyExtendedInterface = {
test: function() {
// this points to the DOM element itself
console.log(this);
}
}
var elements = document.getElementsByClassName('extended');
for (var i = 0, el; el = elements[i]; ++i) {
for (var j in MyExtendedInterface) {
// bind the interface methods to the current element
el[j] = MyExtendedInterface[j].bind(el);
}
}
.bind()
是JavaScript的最新成员;另见:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind