每个表行的Jquery方程

时间:2015-02-11 17:02:19

标签: jquery row each

我在使用下面的代码时遇到了一些麻烦,而且我对jQuery来说太新了。

function calcExpiration(){
    var getState = jQuery( "#state" ).text();
    var getcalldate = jQuery( "#date" ).text();
    var date = new Date( getcalldate );
    if (getState == "KY" || getState == "IN"){
        date.setDate(date.getDate() + 30);
    }
    if (getState == "WV" || getState == "OH"){
        date.setDate(date.getDate() + 10);
    }
    var expmonth = date.getMonth()+1;
    var expdate = date.getDate();
    var expyear = date.getFullYear();
    jQuery( "#expiration" ).html( expmonth + "/" + expdate + "/" + expyear);
}
calcExpiration();

我在表格中有多行信息,并且我希望每行都有到期计算,而上述代码仅适用于第一行。

3 个答案:

答案 0 :(得分:0)

我的第一个猜测是你正在使用不正确的ID。在HTML文档中,只有一个带有一个id的元素,因此jQuery('#expiration')可能只返回第一个匹配元素,即使多个元素具有相同的ID。

我建议您将expiration从ID更改为类。通常,在Jquery处理时,使用类而不是id不会出错。

另外,我想到一个更具描述性的名字。 .expiration是通用的,使上面的Jquery代码难以脱离上下文;也许类似.expiration_date_updatable的东西会更令人回味?也许这是一个糟糕的例子,但一般来说,只要这些类挂钩到Jquery行为,就使用非常精确和描述性的类名。为你的代码的读者(包括你未来的自己)做它。

答案 1 :(得分:0)

ID(#)将始终适用于具有给定id的第一个元素,以使所有您应该使用类(。)的工作...下面是一个简单的示例

<p class="test-tag">Demo</p>
<p class="test-tag">Demo</p>
<p class="test-tag">Demo</p>
<p class="test-tag">Demo</p>
<p class="test-tag">Demo</p>
<a class="test">Btn1</a>
<a class="test">Btn2</a>
<a class="test">Btn3</a>
<a class="test">Btn4</a>

jQuery( '.test' ).click(function() {
    var time = jQuery.now();
    jQuery('.test-tag').empty().html(time);
});

答案 2 :(得分:0)

我不是jQuery的专家,但您是否尝试过这样做我认为您想要实现的目标?

HTML

<table>
<tr>
    <th>State</th>
    <th>Date</th>
    <th>Expiration</th>
</tr>
<tbody>
    <tr>
        <td>KY</td>
        <td>02-12-2015</td>
        <td></td>
    </tr>
    <tr>
        <td>IN</td>
        <td>01-20-2014</td>
        <td></td>
    </tr>
    <tr>
        <td>WV</td>
        <td>03-02-2014</td>
        <td></td>
    </tr>
    <tr>
        <td>OH</td>
        <td>04-05-2012</td>
        <td></td>
    </tr>
</tbody>

的jQuery

$('table tbody tr:not(":first")').each(function (e) {
var state = $('td:eq(0)', this).text();
var getcalldate = $('td:eq(1)', this);
var dsplit = getcalldate.text().split("-");
var d=new Date(dsplit[2],dsplit[0],dsplit[1]-1);
var expDates = $('td:eq(2)', this);

var expmonth = d.getMonth() + 1;
var expdate = d.getDate();
var expyear = d.getFullYear();
var resultDate = expmonth + "-" + expdate + "-" + expyear

if (state == "KY" || state == "IN") {
    expDates.text(resultDate);
    d.setDate(d.getDate() + 30);
} else if (state == "WV" || state == "OH") {
    expDates.html(resultDate);
    d.setDate(d.getDate() + 10);
}

});