2015-02-03 6 views
0

3 열이있는 동적으로 생성 된 테이블이 있습니다. Col 2에서 Col 3의 차이점이 필요합니다. 동적으로 생성 된 테이블을 처리하는 방법에 대한 단서가 없습니다. 내 저장 기능에서 테이블 값을 읽는 중입니다. 차이점 코드를 포함하는 방법을 제안 해주십시오.자바 스크립트에서 동적으로 생성 된 행에서 2 열의 차이를 얻는 방법

JS :

function save() 
{ 
var eval_tbl = document.getElementById('bagger_reading_list'); 
var eval_row_array = []; 
     for (i=0; i<eval_tbl.rows.length; i++) 
     { 
      var tableRow = { 
       Start_Reading : eval_tbl.rows[i].cells[1].firstElementChild.value, 
       End_Reading : eval_tbl.rows[i].cells[2].firstElementChild.value, 
       Total_Reading : eval_tbl.rows[i].cells[3].firstElementChild.value, \\ I need the difference of End-Reading - Start_Reading to be displayed on Total_Reading of eah row created. 
      } 
      eval_row_array[eval_row_array.length] = tableRow; 
     } 

} 
+2

DOM traversal을 피하기 위해 미리 차이를 계산하지 마십시오. 이미 필요한 데이터가 있습니다. –

+0

@aruna 아래의 답변을 찾아 문제를 해결하는 데 가장 적합한 것으로 표시하십시오. –

+0

이것은 잘못된 설계 원리입니다. 손에있는 데이터가 있다면 .... 먼저 처리하십시오. 그냥 렌더링 할 모양으로 만들면 데이터 표현을 변경하기 위해 DOM 트래버스가 더 이상 필요하지 않습니다. 가장 좋은 방법은 배열에서 html .... manipulate ...로 동기화 된 데이터 배열을 유지하고 필요한 경우 HTML을 다시 렌더링하는 것입니다. – Vijay

답변

2

플로트 값으로 변환 parseFloat() 사용 (안전을 위해)하고 합산. 그것을 좋아합니까 :

function save() 
{ 
var eval_tbl = document.getElementById('bagger_reading_list'); 
var eval_row_array = []; 
     for (i=0; i<eval_tbl.rows.length; i++) 
     { 
      var tableRow = { 
       Start_Reading : eval_tbl.rows[i].cells[1].firstElementChild.value, 
       End_Reading : eval_tbl.rows[i].cells[2].firstElementChild.value, 
       Total_Reading : parseFloat(eval_tbl.rows[i].cells[2].firstElementChild.value) - parseFloat(eval_tbl.rows[i].cells[1].firstElementChild.value) 
      } 
      eval_row_array[eval_row_array.length] = tableRow; 
     } 

} 

Readup :

Total_Reading : parseFloat(eval_tbl.rows[i].cells[2].firstElementChild.value) - parseFloat(eval_tbl.rows[i].cells[1].firstElementChild.value), 

을 그래서, 당신의 저장 기능은 같아야합니다 parseFloat() | MDN

+0

감사합니다. @Rahul Desai. 이것은 효과가 있었다. – aruna

+0

@aruna 도움이 된 것을 기쁘게 생각합니다. 이 대답을 승낙하고 표시해주십시오. –

1

이 시도 :

function save() 
    { 
    var eval_tbl = document.getElementById('bagger_reading_list'); 
    var eval_row_array = []; 
      for (i=0; i<eval_tbl.rows.length; i++) 
      { 
var startReading = eval_tbl.rows[i].cells[1].firstElementChild.value; 
var endReading = eval_tbl.rows[i].cells[2].firstElementChild.value; 
var totalReading = parseFloat(endReading) - parseFloat(startReading); 
       var tableRow = { 
        Start_Reading : startReading, 
        End_Reading : endReading, 
        Total_Reading : totalReading 
       } 
       eval_row_array[eval_row_array.length] = tableRow; 
      } 

    } 
+0

응답 해 주셔서 감사합니다. 제공된 코드가 저에게 효과적입니다. 귀하의 회신에 감사드립니다. – aruna

0

나는 작은 코드를 작성했습니다 . 필요에 맞는 지 확인하십시오.

function saved() 
{ 

     var eval_tbl = document.getElementById('Table'); 
     var eval_row_array = []; 
     for (i=0; i<eval_tbl.rows.length; i++) 
     { 

      var tableRow = { 
       Start_Reading : eval_tbl.rows[i].cells[0].innerHTML, 
       End_Reading : eval_tbl.rows[i].cells[1].innerHTML, 
       Total_Reading :parseInt(eval_tbl.rows[i].cells[0].innerHTML) - parseInt(eval_tbl.rows[i].cells[1].innerHTML) 
      } 
      eval_tbl.rows[i].cells[2].innerHTML=parseInt(eval_tbl.rows[i].cells[0].innerHTML) - parseInt(eval_tbl.rows[i].cells[1].innerHTML) 
      eval_row_array[eval_row_array.length] = tableRow; 

     } 

} 
+0

이전 응답을 기반으로 솔루션을 구현했습니다. 정보 공유에 감사드립니다. – aruna

+0

즐거움은 모두 내 것입니다. –