2017-10-11 41 views
0

我有一些複製X次的HTML。對於這個例子可以說3次。如何使用Javascript刷新多個HTML元素

HTML:

<tr id="flashingtr" class="flashingtr"> 
    <td>name</td> 
    <td>13</td> 
    <td>16:00 
    </td> 
</tr> 
<tr id="flashingtr" class="flashingtr"> 
    <td>name</td> 
    <td>13</td> 
    <td>16:00 
    </td> 
</tr> 
<tr id="flashingtr" class="flashingtr"> 
    <td>name</td> 
    <td>13</td> 
    <td>16:00 
    </td> 
</tr> 

而且我有一些JavaScript運行:

<script type="text/javascript"> 
    var flash = document.getElementById('flashingtr') 
    setInterval(function() { 
     flash.style.backgroundColor = (flash.style.backgroundColor == 'red' ? 'white' : 'red'); 
    }, 500); 
</script> 

現在這上面的JavaScript的作品,而是一個ID只能出現一次(在theorie)。所以我認爲這就是爲什麼只有第一個<tr>閃爍。

於是我嘗試了以下內容:

<script type="text/javascript"> 
    var flash = document.getElementsByClassName('flashingtr') 
    setInterval(function() { 
     flash.style.backgroundColor = (flash.style.backgroundColor == 'red' ? 'white' : 'red'); 
    }, 500); 
</script> 

但不起任何作用。

問題: 如何使用此代碼閃爍多個HTML元素?

+2

多個相同的ID在HTML – MysterX

+0

禁用那不是我的問題。我知道這個。代碼是例如。 –

+0

@NashCarp如果你知道這一點,那麼'getElementById'只返回一個項目並不讓你感到驚訝。 – ceejayoz

回答

2

它是因爲id是唯一的。所以JavaScript只會返回一個元素。

在你的情況下,這個元素;

<tr id="flashingtr" class="flashingtr"> 
    <td>name</td> 
    <td>13</td> 
    <td>16:00 
    </td> 
</tr> 

在你的第二個例子中,按類選擇元素。這將返回一個帶有元素列表的object。你必須循環通過objects

在閱讀您的意見後,我想出了以下內容。 你必須在setInterval內定義for環路

這樣它就可以工作了,而且它們都會閃爍。

var flash = document.querySelectorAll('.flashingtr'); 
 

 
setInterval(function() { 
 
    for(var i = 0;i < flash.length;i++) { 
 
\t \t var selector = flash[i]; 
 
     selector.style.backgroundColor = (selector.style.backgroundColor == 'red' ? 'white' : 'red'); 
 
    } 
 
}, 500);
<table> 
 
    <tr class="flashingtr"> 
 
     <td>name</td> 
 
     <td>13</td> 
 
     <td>16:00 
 
     </td> 
 
    </tr> 
 
    <tr class="flashingtr"> 
 
     <td>name</td> 
 
     <td>13</td> 
 
     <td>16:00 
 
     </td> 
 
    </tr> 
 
    <tr class="flashingtr"> 
 
     <td>name</td> 
 
     <td>13</td> 
 
     <td>16:00 
 
     </td> 
 
    </tr> 
 
</table> 
 

 
<div class="test"> 
 
</div>

+0

這段代碼不起作用,你得到一個錯字'document.getElementByClassName('flashingtr')' –

+0

這不是唯一的錯字。在for循環中,flash.style不會被定義。由於flash是元素的數組。 – RogerC

+0

對不起,你們是對的。我複製他的代碼並粘貼。錯過了這些錯字。更正它。感謝您的注意。 – Red

2

document.getElementByClassName不是一個函數,元素後,你應該使用document.getElementsByClassName

注意「s」:它返回一個數組。

然後你會通過你的元素的數組必須循環:

setInterval(function() { 

    var flashElements = document.getElementsByClassName('flashingtr'); 
    var i; 
    for (i=0;i<flashElements.length;i++) { 
     flashElements[i].style.backgroundColor = (flashElements[i].style.backgroundColor == 'red' ? 'white' : 'red'); 
    } 

}, 500); 

編輯: 我感動的setInterval函數裏面的循環。這樣,如果添加了「flashingtr」類的新TR文檔,它也會閃爍。

+0

我試過你的代碼,只有最後一個閃爍。前兩個沒有。 –

+0

你是對的。我編輯了我的答案並進行了測試。這三個要素現在應該閃爍。 – RogerC

+0

謝謝你的回答,以及。由於他使用了'querySelectorAll',我選擇了@Red的答案作爲接受的答案。例如,我可以在其中放入'.flashingtr td:first-child'。我喜歡那個。 你的'flashElements'可以設置在'setInterval'之外,所以它只創建一次。 –

1

如何使用CSS動畫閃爍的效果呢?

const 
 
    selectElement = document.querySelector('#anim-select'); 
 

 
let 
 
    oldStyle = ''; 
 
    
 
function onAnimStyleChanged(event) { 
 
    const 
 
    rows = Array.from(document.querySelectorAll('tr')); 
 
    if (oldStyle !== '') { 
 
    rows.forEach(row => row.classList.remove(oldStyle)); 
 
    } 
 
    
 
    oldStyle = event.target.value; 
 
    if (oldStyle !== '') { 
 
    rows.forEach(row => row.classList.add(oldStyle)); 
 
    } 
 
    
 
} 
 

 
selectElement.addEventListener('change', onAnimStyleChanged);
@keyframes flashing-hard { 
 
    0% { background-color: white; } 
 
    49% { background-color: white; } 
 
    50% { background-color: red; } 
 
    100% { background-color: red; } 
 
} 
 

 
@keyframes flashing-soft { 
 
    0% { background-color: white; } 
 
    50% { background-color: red; } 
 
} 
 

 

 
table { 
 
    border-collapse: collapse; 
 
} 
 

 
.hard-flash > td { 
 
    animation-duration: 1000ms; 
 
    animation-name: flashing-hard; 
 
    animation-iteration-count: infinite; 
 
    animation-timing-function: linear; 
 
} 
 

 
.soft-flash > td { 
 
    animation-duration: 1000ms; 
 
    animation-name: flashing-soft; 
 
    animation-iteration-count: infinite; 
 
    animation-timing-function: linear; 
 
}
<table> 
 
    <tbody> 
 
    <tr id="flashingtr" class=""> 
 
     <td>name</td> 
 
     <td>13</td> 
 
     <td>16:00 
 
     </td> 
 
    </tr> 
 
    <tr id="flashingtr" class=""> 
 
     <td>name</td> 
 
     <td>13</td> 
 
     <td>16:00 
 
     </td> 
 
    </tr> 
 
    <tr id="flashingtr" class=""> 
 
     <td>name</td> 
 
     <td>13</td> 
 
     <td>16:00 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
<table> 
 

 
<label for="anim-select">Set animation style</label> 
 
<select id="anim-select"> 
 
    <option value="">Off</option> 
 
    <option value="soft-flash">Soft flash</option> 
 
    <option value="hard-flash">Hard flash</option> 
 
</select>

+0

我喜歡柔和的閃光,但我不需要非常漂亮的閃光燈。所以,因爲我不需要,我不喜歡很多代碼行。在這一刻,我可以用更少的線條來做同樣的事情。但是,感謝這個主意!也許有人閱讀它需要它。 –

相關問題