2015-02-11 42 views
0

我在下面的代碼中遇到了一些問題,我對jQuery太新了。每個表格行的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(); 

我的信息的多個行的表內,並且我想有到期計算每個行和上述代碼僅工作爲先。

回答

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); 
} 

}); 
+0

你的代碼在這裏不起作用 - https://jsfiddle.net/5tkp6fdf/ – dgodfather 2015-02-12 20:34:36

+0

你沒有在你的小提琴中選擇jQuery作爲框架,這就是爲什麼它不起作用。在屏幕左側的「框架和擴展」選擇jQuery。這是我的小提琴:[小提琴](http://jsfiddle.net/emfuentes27/84oemvvb/) – cubanGuy 2015-02-12 21:53:23

+0

顯然是另一個noob錯誤。哈哈我有我的例子中使用的代碼版本,它工作得很好。謝謝!! 有一點我不清楚的是,在處理一個不是31天的月份時,它會從該月的實際天數中減去該月份。 如果這個月不是31天(例如,2月是28天),那麼它會在KY/IN的if語句中減去我的「+30」計算的3。 想法? – dgodfather 2015-02-13 15:20:31

0

我的第一個猜測是你使用的ID不正確。在HTML文檔中,僅僅意味着具有一個id的單個元素,因此即使多個元素具有相同的ID,jQuery('#expiration')也可能只返回第一個匹配元素。

我建議你將expiration從id改爲class。一般來說,你不能使用class而不是id作爲Jquery句柄。

此外,我會想到一個更具描述性的名字。 .expiration是通用的,並且使上面的Jquery代碼很難從上下文中讀出;也許像.expiration_date_updatable會更令人回味?也許這是一個糟糕的例子,但總的來說,只要這些類掛鉤到Jquery行爲中,就可以使用精確的和描述性的類名。爲你的代碼的讀者(包括你未來的自己)做。

+0

我換了ID爲類,現在我得到的NaN/NaN的/ NaN的。 該表根據輸入表格動態添加行。類和ID將永遠是相同的,除非我迭代一個我不希望這樣做的數組,以便我可以在其他地方更高效地應用CSS。 – dgodfather 2015-02-11 17:45:17

+0

如果內容動態添加到表中,它應該沒有什麼區別;在任何時候,當'calcExpiration()'運行時,像jQuery('。expiration')。html(...)'這樣的底線將選擇DOM中存在的所有匹配元素(即在頁面上)那一刻。它與這些元素的作用是另一回事。如果你在頁面HTML中顯示NaN,這意味着你的計算邏輯有問題(使用'console.log(「blah blah」)'語句排除這些錯誤),但這是一個完全獨立的問題。 – 2015-02-11 18:46:28

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); 
}); 
相關問題