2013-06-05 85 views
0

所以我的问题是,无论何时运行此循环,它只会抓取第一次翻转时元素的更改。有没有办法让它每次都做这些改变?每当我循环访问时,通过ID获取元素

<script> 
for (i=0; i<5; i++){ 
    document.write('<div id=\"blah\" >text</div>'); 
    var b = document.getElementById("blah"); 
    b.style.width ="200px";  
    b.style.backgroundColor="yellow"; 
} 
</script> 
+0

这可能有助于http://stackoverflow.com/questions/802854/why-is-document-write-considered-a-bad-practice。此外,你忘了声明'我'。 – elclanrs

+0

id是唯一的,您应该使用name属性并使用getElementsByName() – Saturnix

回答

3

id在文档中必须是唯一的。因此这个问题。即使有多个匹配,DOM也只会返回1个节点。

你可以做这样的事情:

for (var i=0; i<5; i++){ 
    var div = '<div class="blah" >text</div>'; 
    div.style.width ="200px"; 
    div.style.backgroundColor="yellow"; 
    document.write(div); 
} 
2

我有两个想法克服这一点。首先是创建元素,改变其风格,并追加它。

<script type="text/javascript"> 
    for (var i = 0; i < 5; i++) { 
     var div = document.createElement("div"); 
     div.style.width = "200px"; 
     div.style.backgroundColor = "yellow"; 
     document.appendChild(div); 
    } 
</script> 

另一个想法是,你不需要对DOM元素的引用,因为你只是改变样式,所以你可以将样式应用于CSS。例如:

<style type="text/css"> 
    div.something { 
     width: 200px; 
     background-color: yellow; 
    } 
</style> 

<script type="text/javascript"> 
    for (var i = 0; i < 5; i++) { 
     document.write("<div class='something'>text</div>"); 
     // Or use the createElement/appendChild approach from above, 
     // where you'd need to set the div.className property as "something" 
    } 
</script> 
0

您需要将元素添加到DOM以便稍后能够访问它。

for(var i=0;i<5;i++) 
{ 
    //I'm not sure if you are just trying to make these changes each iteration 
    //or create a new element each time. If you are trying to create a new element 
    //each time. I'd def consider going a diff route i.e. use classes. 
    var b; 
    if(i==0){ 
    b = document.createElement("DIV"); 
    b.id = "blah";} 
    else{ 
    b = document.getElementById("blah");} 

    b.style.width ="200px";  
    b.style.backgroundColor="yellow"; 
} 
+0

我试图对每次迭代进行更改,并每次将这些更改打印出来。这些更改来自不同循环中的单独的php变量,但这似乎不是问题。主要的问题是,我似乎无法多次改变一个元素,因为它会影响其循环中的样式。有没有更好的方法来做到这一点?这些解决方案似乎都不能解决这个问题。顺便一提,谢谢大家回答! – mike

+0

使用jQuery会使事情变得更容易,但循环的目的是什么?是否有几个元素需要改变,或者每次发生什么时候改变一个元素? – ExceptionLimeCat

+0

每次循环时都会更改一个元素,但我希望它每次更改时都打印出元素。 – mike