Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有名称空间的DOM注入_Javascript - Fatal编程技术网

Javascript 具有名称空间的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

我知道扩展DOM元素是一种糟糕的做法。但我想知道是否可以将方法注入命名空间下的特定元素。下面的例子说明了我的意思

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元素进行非严格处理的东西解析了,那么代码就被破坏了。我的错。我试图使代码尽可能简单。我把它编辑得更像我的图书馆。其思想是能够根据需要注入尽可能多的元素,并且这些元素承载了此后的所有方法。