2013-01-22 35 views
0

我試圖做一個函數,使用一些其他函數,以使用JS循環通過具有特定名稱的類,並添加一個'*'在這些HTML標籤內部的末尾。它並不完美,所以我需要改變什麼?班級名稱是「價格」。一個函數,將通過span類循環,並在末尾添加文本

function insertAfter(referenceNode, newNode) { 
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); 
} 

function getValues(objName) { 
    var arr = new Array(); 
    var el = document.createElement("span"); 
    el.innerHTML = "*"; 
    arr = document.getElementsByClassName(objName); 
    for(var i = 0; i < arr.length; i++) { 
     var obj = document.getElementsByClassName(objName).item(i); 
     insertAfter(obj, el) 
    } 
}; 

getValues("price"); 
+0

您應該將'var obj = document.getElementsByClassName(objName).item(i);'更改爲'var obj = arr [i];',但這不可能是一個概率lem - 只是修復了效率低下問題。 –

回答

1

難道這

function getValues(objName) { 
      var arr = new Array(); 
      arr = document.getElementsByClassName(objName); 
      for (var i = 0; i < arr.length; i++) { 
       var el = document.createElement("span"); 
       el.innerHTML = "*"; 
       var obj = document.getElementsByClassName(objName).item(i); 
       insertAfter(obj, el) 
      } 
     }; 

其實你需要創建要將該元素插入標籤的新el每一次,否則你會結束了,在年底只增加一個*元素DOM中具有「價格」類的最後一個標籤。

+0

真棒謝謝你! – HWR

0

你是什麼意思的「它不工作」?

document.getElementsByClassName已經返回一個數組,你不需要兩次取水的時候,那樣做:

arr = document.getElementsByClassName(objName); 
for(var i = 0; i < arr.length; i++) { 
    var obj = arr[i]; 
    insertAfter(obj, el); 
} 

重寫insertAfter要真正做一個insertAfter:

function insertAfter(referenceNode, newNode) { 
    referenceNode.insertAfter(newNode, referenceNode.lastChild); 
} 

看這裏的工作示例:http://jsfiddle.net/BJ3YR/

相關問題