2012-07-29 78 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