2012-08-09 128 views
1

我在HTML文件中有一个表格,我想根据其他单元格的值和单元格值计算一个单元格的值作为公式。看看这张照片:根据公式和其他单元格中的值计算单元值

my table calculate

在我的表,我有1900比和三个因素在三列。我如何根据各自的公式列值计算结果列值?

注:我只用*/+,在我的公式-。此外,该表具有一个ID(ratiotable),但<tr><td>没有分配给它们的任何ID或类名称。

如果你知道另一个网页做了这样的事情,请让我看看这个。

非常感谢。

编辑: HTML代码是这样的。请注意,我剪了一些行。行的实际数量为1900:

<table> 
<thead> 
    <tr> 
     <th>Ratio Name</th> 
     <th>Factor1</th> 
     <th>Factor2</th> 
     <th>Factor3</th> 
     <th>Formula</th> 
     <th>Result</th> 
    </tr> 
</thead> 
<tbody> 
    <tr> 
     <td>Name1</td> 
     <td>22</td> 
     <td>11</td> 
     <td></td> 
     <td>Factor1/Factor2</td> 
     <td></td> 
    </tr>  
    <tr> 
     <td>Name2</td> 
     <td>22</td> 
     <td>33</td> 
     <td>11</td> 
     <td>Factor1/Factor2*Factor3</td> 
     <td></td> 
    </tr> 
    <tr> 
     <td>Name1</td> 
     <td>12</td> 
     <td></td> 
     <td>4</td> 
     <td>(Factor1+Factor2)/Factor3</td> 
     <td></td> 
    </tr> 
</tbody> 

+0

你可以把你正在使用它 – rahul 2012-08-09 13:20:20

+0

@rahul我编辑的问题,刚才 – 2012-08-09 13:29:58

+0

实际的HTML这是GUD现在可以请你告诉我,你的公式将只用这个术语来说是Factor1 Factor2 ... – rahul 2012-08-09 13:31:37

回答

4

这是一个非常有趣的挑战。我已经放在一起做了你所描述的一点点JSFiddle here。它基本上用公式的字符串部分替换其值对应部分,然后证明结果。希望这有助于!

我的标记

<table> 
    <thead> 
     <tr> 
      <th>Ratio Name</th> 
      <th>Factor1</th> 
      <th>Factor2</th> 
      <th>Factor3</th> 
      <th>Formula</th> 
      <th>Result</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>Name1</td> 
      <td>22</td> 
      <td>11</td> 
      <td></td> 
      <td>Factor1/Factor2</td> 
      <td></td> 
     </tr>  
     <tr> 
      <td>Name2</td> 
      <td>22</td> 
      <td>33</td> 
      <td>11</td> 
      <td>Factor1/Factor2*Factor3</td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>Name1</td> 
      <td>12</td> 
      <td></td> 
      <td>4</td> 
      <td>(Factor1+Factor2)/Factor3</td> 
      <td></td> 
     </tr> 
    </tbody> 
</table> 

我的JavaScript

$(function() { 
    $('tbody tr').each(function() { 
     var $this = $(this), 
      f1 = $this.find('td').eq(1).text() || 0, 
      f2 = $this.find('td').eq(2).text() || 0, 
      f3 = $this.find('td').eq(3).text() || 0, 
      formula = $this.find('td').eq(4).text(), 
      resultTd = $this.find('td').last(); 

     formula = formula.replace('Factor1',f1) 
         .replace('Factor2',f2) 
         .replace('Factor3',f3); 

     resultTd.text(eval(formula)); 
    }); 
});​ 
+1

很好的答案!为了后代的缘故,我冒昧地将你的代码复制到答案中。 – FishBasketGordo 2012-08-09 14:11:37

+0

非常好,谢谢! :) – 2012-08-09 14:17:35

3

遍历所有行和使用JavaScript eval()函数

function cellValue(x,y){ 
    return $('#ratiotable').find('tr:eq('+(y+1)+')>td:eq('+(x+1)+')').text();  
} 

function setCellValue(x,y,s){ 
    $('#ratiotable').find('tr:eq('+(y+1)+')>td:eq('+(x+1)+')').text(s);  
} 

$(function(){ 
    $.each($('#ratiotable tr'),function(i,tr){ 
     var Factor1 = parseInt(cellValue(0,i)); 
     var Factor2 = parseInt(cellValue(1,i)); 
     var Factor3 = parseInt(cellValue(2,i)); 
     var Formula = $.trim(cellValue(3,i)); 
     var Result = eval(Formula); 
     setCellValue(4,i,Result); 
    });  
}); 

this

+0

谢谢但公式列决定我应该如何计算结果,不幸的是表的行数是1900. – 2012-08-09 13:23:01

+1

然后遍历每一行,获取单元格值并显示结果! – UnLoCo 2012-08-09 13:31:19

+0

想要这样http://jsfiddle.net/unloco/L6fRj/1/ – UnLoCo 2012-08-09 13:41:55

相关问题