2012-06-13 33 views
2

這裏有一點jQuery newb,但我最近有一個項目,我希望能夠減去同一個相鄰表td元素之間的值系列。如何使用jquery添加/減去相鄰的值​​</td>元素

實施例:

<table> 
     <tr> 
     <td colspan='3'>Year 2008</td> 
     </tr> 
     <tr> 
     <td>Quarter 1</td><td>Quarter 2</td><td>Change Q1-Q2</td> 
     </tr> 

     <tr> 
     <td>Quarter 1 Val</td><td>Quarter 2 Val</td><td>Quarter 2 - Quarter 1</td> 
     </tr> 
     <tr> 
     <td id='y1q1'>2</td><td id='y1q2'>6</td><td id='dy1q1q2'>4</td> 
     </tr> 
    </table> 

這樣的想法是填充元素的id = 'd1y1q2' 與(elemid:y1q2.value - elemid:y1q1.value)。

我知道這應該在SQL級別來處理,但出於數據集是大規模和查詢中數據庫的性質不會處理好這些計算。

任何幫助非常感謝! jQuery DataTables插件可以處理這種事情嗎?

+0

如果數據單元由數據庫填充,我不明白爲什麼它會是困難的來用一個多細胞區別。 – tskuzzy

+0

是那些'id'的動態? – fcalderan

+0

@tskuzzy我將不勝感激+1返回:正如我在文章中提到的那樣:我們的數據庫查詢對於約600行的解決方案而言成本高昂,約8個連接表上有幾個高薪的mysql顧問無法適當地分區或索引。分頁不是一個選項。 – cerd

回答

3
var sub = parseInt($('#y1q2').text(), 10) - parseInt($('#y1q1').text(), 10); 
$('#dy1q1q2').text(sub); 

如果你id s爲動態則:

var lastTR = $('table tr:last'), 
    tdSecond = parseInt($('td',lastTR).eq(1).text(), 10), 
    tdFirst = parseInt($('td', lastTR).eq(0).text(), 10), 
    sub = tdSecond - tdFirst; 

$('td:last', lastTR).text(sub); 

DEMO

如果你的價值也可以浮動,那麼你可以使用.parseFloat()

+0

@cred如果你的表結構仍然與上面相同,那麼我認爲我的第二個代碼應該工作得很好 – thecodeparadox

0
var a = document.getElementById('y1q2').innerHTML; 
var b = document.getElementById('y1q1').innerHTML; 
document.getElementById('d1y1q2').innerHTML = a+b; 

假設喲你只有在這些列中的整數

1

這樣的事情呢?

var y1q1Val = parseFloat($('#y1q1').text()); 
var y1q2Val = parseFloat($('#y1q2').text()); 
var newVal = y1q2Val - y1q1Val; 

$('#dy1q1q2').text(newVal); 

當然,你認爲合適,你可以儘量減少這種...

+0

再次newb,這些ID將被動態填充。我假設你的解決方案將是正確的,但任何建議,以避免大量臃腫的jQuery腳本我有4500行,每年有2004 - 2012年的年度和季度數據(與三角洲Qy-Qx)vals for ea。year。也許for循環? – cerd

+0

是的,for循環sh會工作。我不確定它會表現如何,但是這是你必須測試的東西,我想。它看起來像上面的codeparadox有一個工作解決方案,但你。 你可以用for循環遍歷id, 爲(I = 1; I <4;我++){ $( '#dy1q' + 1 + 'Q' + I + 1)的.text(...) } 但是,這不是很漂亮,thecodeparadox似乎有一個更優雅的方法。 – J2N