2013-06-05 6 views
0

Так что моя проблема в том, что всякий раз, когда я запускаю этот цикл, он захватывает только элементы элемента при первом прокрутке. Есть ли способ заставить это делать эти изменения каждый раз?Получение элемента по идентификатору каждый раз, когда я прохожу через

<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. Кроме того, вы забыли объявить 'i'. – elclanrs

+0

id уникален, вы должны использовать свойство name и использовать getElementsByName() – Saturnix

ответ

3

id должен быть уникальным в документе. следовательно, проблема. DOM вернет только один узел, даже если имеется несколько совпадений.

Вы можете сделать что-то вроде этого:

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

Смежные вопросы