0

仅使用 Javascript,我如何遍历每个 span id = "expiredDate"?我认为使用 for each 循环会很容易,但它似乎不存在于 javascript 中。我下面的代码仅适用于第一个元素。

<script type="text/javascript">
window.onload = function() {
    var definedDate = window.document.getElementById('expiredDate').innerHTML.split("-");
    var expiredDate = new Date(definedDate[0], definedDate[1] - 1, definedDate[2]);
    var graceDate = new Date(definedDate[0], definedDate[1] - 1, definedDate[2] - 30);
    var currentDate = new Date();

    if(currentDate > expiredDate) {document.getElementById('expiredDate').style.color = '#cc6666';}
    else if(currentDate < expiredDate && currentDate > graceDate) {document.getElementById('expiredDate').style.color = '#f0c674';}
    else {document.getElementById('expiredDate').style.color = '#b5bd68';}
}
</script>
<span id="expiredDate">2013-01-01</span>
<span id="expiredDate">2014-01-01</span>
<span id="expiredDate">2015-01-01</span>
4

3 回答 3

5

将您的 ID 切换到类并尝试以下操作

var spans = document.getElementsByTagName('span');
var l = spans.length;
for (var i=0;i<l;i++) {
    var spanClass = spans[i].getAttribute("class"); 
    if ( spanClass === "expiredDate" ) { 
        /*do stuff to current spans[i] here*/
    }
}
于 2012-12-12T17:35:37.337 回答
2

两种方法还没说;对于两者,您都应该使用表格

<span class="expiredDate">...</span>

1..querySelectorAll方法:

var result = document.querySelectorAll('span.expiredDate'); // NodeList

2..getElementsByClassName结合Array.prototype.filter

var result = Array.prototype.filter.call(
                 document.getElementsByClassName('expiredDate'),
                 function (elm) { return elm.tagName === 'SPAN'; }
             ); // Array

方法 1 更快,但是因为您已经使用方法 2 遍历它们,所以您可以稍后通过将所需的操作放入过滤器的函数中来节省循环,从而使其整体更快。

于 2012-12-12T17:49:27.360 回答
0

取决于您所针对的浏览器版本。请参阅 caniuse 的document.getElementsByClassName。根据您的范围,您还可以使用 document.getElementsByTagName 并进行迭代。或者使用 XPath 或 jQuery。

于 2012-12-12T17:27:21.520 回答