2010-09-06 23 views
1

我試圖創建使用表作爲查找表。通常,我會做這個服務器端,但在這種情況下,我只是有一個HTML表和表將被輸入的客戶端。jQuery:查找表值

基本上,當填寫一個表格時,他們會給我兩個值,它們在列A & B中。然後表格需要使用列C中的相應值進行計算。列A重複多次,而不是輸入它會多次使用rowspan屬性,這似乎使這個問題變得非常複雜,但改變它可能是一件大事(這可能是可能的,但我寧願避免)。

的簡化版本:

<table> 
    <thead> 
    <tr><th>Column A</th><th>Column B</th><th>Column C</th></tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td rowspan="3">val1</td> 
     <td>1</td> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td>2</td> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td>2</td> 
     <td>3</td>  
    </tr> 
    <tr> 
     <td rowspan="2">val2</td> 
     <td>4</td> 
     <td>5</td> 
    </tr> 
    <tr> 
     <td>10</td> 
     <td>15</td> 
    </tr> 
    </tbody> 
</table> 

因此,如果他們輸入: val1和1 - > 2 val2次和4 - > 5 val2次和10 - > 15

的一個想法我有首先將表解析爲一個嵌套數組,然後使用它。它似乎工作,但我想讓別人對最好的方式來處理這個問題的意見。如果我只能基於DOM查詢/過濾,它似乎會佔用較少的內存,但是再次rowspan屬性似乎使這些解決方案變得很難看。

編輯:校正具有在TR上的標籤,而不是TD標籤 編輯第二行跨度屬性:通過該示例部分,你可能會查找任何行

+0

因此,您只需要每個「val1」和「val2」部分下的第一行值? (例如:如果val1和1存在,val1只使用「2」,如果val2和4存在,val2只使用數字5進行計算?)第二個rowspan上是否還有拼寫錯誤? (應該在td標籤中,對嗎?) – taber 2010-09-06 03:12:51

回答

0

我認爲最好的方式試圖澄清(除在表單數據服務器端工作)將使用jQuery直接使用表單數據,然後在之前提交,而不是使用HTML結果。

但是,如果您無法控制該值,則會將每個「val#」rowspan的「C」列值的第一行放入由每個「val#」字符串鍵入的對象中,您可以使用它例如for循環)。你應該添加一個「id」屬性(例如:id =「myTable」)到你的表標記中,因爲這樣會優化jQuery選擇器。


$(window).ready(function() { 
    var vals = {}, $table = $('#myTable'); 

    $table.find('td[rowspan]').each(function(i,e) { 
    $(e).siblings().each(function(j,s) { 
     var html = e.innerHTML, key = (html.match(/^[a-z0-9]+$/)) ? html : i.toString(); 

     vals[key] = parseInt($(s).html(), 10); 
    }); 
    }); 

    for(var val in vals) { 
    if(!vals[val]) continue; 

    vals[val] = vals[val] + 20; 

    alert(vals[val]); // alerts 22, then 25 
    } 
});