如何使用jQuery每秒减少HTML元素的值?

时间:2011-09-05 13:24:47

标签: javascript jquery timer

这是我到目前为止所拥有的:

var timer = setInterval(function () {
    $(".auctiondiv .auctiondivleftcontainer .countdown").text(sec--);
}, 1000);

这很好用,但问题出现了,因为我必须在启动时设置sec的值,并且我页面上的每个倒计时元素都具有相同的值。因此,不是保存值并减少它,也许最好只获得每个tick的值并减少它 - 而不是在Javascript中的任何地方保存值。

如何获取.countdown元素(<p>标记)中的文本并从中减去一个并将其分配回同一个<p>元素?令我困惑的是,我的页面上有很多.countdown元素,我将如何浏览每一个?

我还需要确保.countdown值一旦达到零,我就能做点什么。有条件可以这么说。我想我可以使用.parent(),但我们会看到。

任何指导?

2 个答案:

答案 0 :(得分:3)

您可以使用jQuery each方法迭代匹配的元素集:

var timer = setInterval(function () {
    $(".countdown").each(function() {
        var newValue = parseInt($(this).text(), 10) - 1;
        $(this).text(newValue);
        if(newValue == 0) {
           //Do something
        }
    });
}, 1000);

我已经将选择器更改为.countdown,因为你说你在页面上有很多这样的元素,而且我假设它们并不是全部都会被原来的选择器匹配,但是你可以显然必要时改变它。

以上是上述代码的working example

答案 1 :(得分:1)

您应该将多次使用的元素存储在变量中以节省资源。

此外,由于setTimeout的行为不同,我们鼓励setInterval使用// cache elements to save resources var $countdownElements = $( ".countdown" ); function countDown() { $countdownElements.each( function () { var $this = $( this ); // again, cache element for later use var newValue = parseInt( $this.text(), 10 ) - 1; $this.text( newValue ); if ( newValue == 0 ) { //Do something } }); // call this function again in 1 second setTimeout( countDown, 1000 ); } countDown(); 。您可以阅读here

的原因
{{1}}