Javascript 具有名称空间的DOM注入
我知道扩展DOM元素是一种糟糕的做法。但我想知道是否可以将方法注入命名空间下的特定元素。下面的例子说明了我的意思Javascript 具有名称空间的DOM注入,javascript,Javascript,我知道扩展DOM元素是一种糟糕的做法。但我想知道是否可以将方法注入命名空间下的特定元素。下面的例子说明了我的意思 var element = document.getElementById('my-element'); var inject = function (element) { var nameSpace = element.nameSpace = {}; nameSpace.method1 = function () { //do something
var element = document.getElementById('my-element');
var inject = function (element) {
var nameSpace = element.nameSpace = {};
nameSpace.method1 = function () {
//do something
}
nameSpace.method2 = function () {
//do something
}
}
inject(element);
这可以接受吗?我不确定扩展元素是否是您想要的,而是从为这些元素向代码中添加侦听器的角度来看 然而,放置这些处理程序的地方是名称空间的好地方 例如:
var myNS = {};
myNS.count = 0;
myNS.method1 = function(){
var out = document.getElementById("out");
out.innerHTML = "Clicked " + myNS.count++ + " times!";
};
window.onload = function(){
var elem = document.getElementById('my-element');
elem.addEventListener('click',myNS.method1, false);
};
(请参阅此JSFIDLE以获取示例:)为什么需要这个?如果您想将函数和一些数据与DOM元素相关联,您可以编写一个包装器。潜在的名称冲突实际上是不扩展DOM元素的原因之一,但不是唯一的原因。这是关于这个话题的。谢谢链接。不过我已经读过了。我这样问是因为这是一种向单个元素添加额外方法和跨浏览器实现(如跨浏览器getElementByClassName)的快速方法。我认为这里节省的时间将用于修复bug。毕竟,如果您需要gEBCN之类的垫片,那么您肯定也打算在IE8中扩展DOM对象——这很糟糕。我已经基于此编写了库,在IE6、IE7和IE8中一切都很好。但将来会不会有类似元素被锁定,无法在其中插入对象的情况。谢谢你的回答,但我想你误解了我。问题是关于元素中的名称空间,而不是元素之外的名称空间。。。换言之,只有一个元素具有该方法。。。如果您需要随时间调整标记结构,它将非常脆弱,容易损坏并导致大量重新编码。如果那个元素被破坏了,或者被不允许对DOM元素进行非严格处理的东西解析了,那么代码就被破坏了。我的错。我试图使代码尽可能简单。我把它编辑得更像我的图书馆。其思想是能够根据需要注入尽可能多的元素,并且这些元素承载了此后的所有方法。