2012-07-29 41 views
2

我有一个javascript脚本,当我点击一个按钮时,在我的页面中添加元素。我想用这些新元素,给他们打电话。在添加javascript后刷新document.element

var e = document.getElementsByName('group'); 

当我执行之前和在添加名为“组”(在源代码中检查)的元件的后,我有相同数量的元素..

e.length /* before : return 2 */ 
e.length /* after... 2 :/ */ 

我认为文件。没有更新,是真的,你有任何解决方案?

编辑:

function newgroup() { 
     var e = document.getElementsByName('group'); 
     var nb = e.length + 1; 
     div = document.createElement("div"); 
     div.id = 'group'+nb; 
     div.className = 'panel_drop'; 
     div.setAttribute('name', 'group'); 
     div.innerHTML = '<h5>Group '+nb+'</h5>'; 
     div.innerHTML += '<div class=\'drop_zone\'></div>'; 
     document.getElementById('groups').appendChild(div); 
    } 

我用attribut name算组的数量,我选择他们后,他们的ID。但数量不会更新^^

编辑2:

这是一个错误,我曾与Chrome的开发工具断点问题。

+0

灿你发布你添加元素的代码?顺便说一句,像萤火虫这样的工具会向你显示当前的DOM(添加后)。 – 2012-07-29 15:34:51

+0

该代码已被添加 – nlassaux 2012-07-29 15:41:04

+0

你可以发布多一点的代码?我测试了你发布的代码,它工作正常。您可以使用正确的数字添加尽可能多的标题元素。 – Radu 2012-07-29 15:57:42

回答

3

getElementsByName返回一个活的NodeList,这意味着结果会在您对DOM进行更改时自动更新。据我所知,这不是受跨浏览器问题的影响..所以你看到的问题可能是不相关的。从the spec

的getElementsByName(name)方法接受一个字符串名称,必须 返回一个包含 文档有一个名称属性,其值等于名义 参数在所有的HTML元素的现场节点列表(以区分大小写的方式),按树形顺序。当在具有相同参数的Document对象上再次调用方法 时,用户 代理可能会返回与先前调用返回的对象相同的结果。 在其他情况下,必须返回一个新的NodeList对象。

Eaxmple:

http://jsfiddle.net/hhdPB/

var e = document.getElementsByName('group'); 

console.log(e.length); // 0 

var el = document.createElement('span'); 
el.setAttribute('name', 'group'); 

document.body.appendChild(el); 

console.log(e.length); // 1 

document.body.appendChild(el.cloneNode(false)); 

console.log(e.length); // 2 

另外,你贴上去的代码似乎很好地工作:

http://jsfiddle.net/GyTBw/1

function newgroup() { 
    var e = document.getElementsByName('group'); 
    var nb = e.length + 1; 
    console.log(nb); 
    div = document.createElement("div"); 
    div.id = 'group' + nb; 
    div.className = 'panel_drop'; 
    div.setAttribute('name', 'group'); 
    div.innerHTML = '<h5>Group ' + nb + '</h5>'; 
    div.innerHTML += '<div class=\'drop_zone\'></div>'; 
    document.getElementById('groups').appendChild(div); 
} 

for (var i = 0; i != 5; i++) { 
    newgroup(); // 1 2 3 4 5 
} 
-3

您应该使用jQuery和CLA而不是ElementNames。

因此,例如:

<div class="MyDivs">abc</div> 
<div class="MyDivs">def</div> 
<div class="MyDivs">ghi</div> 

会被选择:

var Divs = $(".MyDivs"); 
+0

这并不回答这个问题,为什么DOM不更新 – 2012-07-29 15:52:07

0

这是我的铬开发工具,操作错误,以及断点..感谢和抱歉,

+0

没有问题,你不需要道歉:)但是,我建议你发布这个作为编辑你的问题,而不是一个单独的答案。另外,如果您觉得您的问题已得到解答,请打上复选标记。或者,您可以提供有关您的错误的更多细节,并将其作为答案提交,以便将来有人可以从中受益。 – Radu 2012-07-30 03:40:00