2010-09-06 115 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 
    } 
});