Jquery 每个 table 行的方程式
Jquery equation for each table row
我在使用下面的代码时遇到了一些问题,我对 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();
我在 table 中有多行信息,我想计算每一行的过期时间,上面的代码只适用于第一行。
我的第一个猜测是您使用 ID 不当。在 HTML 文档中,只有一个元素具有一个 ID,因此 jQuery('#expiration')
可能 return 只有第一个匹配元素,即使多个元素具有相同的 ID。
我建议您将 expiration
从 id 更改为 class。通常,使用 classes 而不是 id 作为 Jquery 句柄不会出错。
此外,我会想到一个更具描述性的名称。 .expiration
是通用的,使得上面的 Jquery 代码很难断章取义;也许像 .expiration_date_updatable
这样的东西会更令人回味?也许这是一个不好的例子,但总的来说,只要那些 class 与 Jquery 行为挂钩,就使用 非常 精确和描述性的 class 名称。为你代码的读者(包括你未来的自己)做这件事。
ID(#) 将始终适用于具有给定 id 的第一个元素,要使其适用于您应该使用 class(.) 的所有元素...下面是一个简单的示例
<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);
});
我不是 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);
}
});
我在使用下面的代码时遇到了一些问题,我对 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();
我在 table 中有多行信息,我想计算每一行的过期时间,上面的代码只适用于第一行。
我的第一个猜测是您使用 ID 不当。在 HTML 文档中,只有一个元素具有一个 ID,因此 jQuery('#expiration')
可能 return 只有第一个匹配元素,即使多个元素具有相同的 ID。
我建议您将 expiration
从 id 更改为 class。通常,使用 classes 而不是 id 作为 Jquery 句柄不会出错。
此外,我会想到一个更具描述性的名称。 .expiration
是通用的,使得上面的 Jquery 代码很难断章取义;也许像 .expiration_date_updatable
这样的东西会更令人回味?也许这是一个不好的例子,但总的来说,只要那些 class 与 Jquery 行为挂钩,就使用 非常 精确和描述性的 class 名称。为你代码的读者(包括你未来的自己)做这件事。
ID(#) 将始终适用于具有给定 id 的第一个元素,要使其适用于您应该使用 class(.) 的所有元素...下面是一个简单的示例
<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);
});
我不是 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);
}
});