2013-05-07 154 views
7

我不知道JQuery,所以我希望有一種方法可以在純JavaScript中執行此操作。單擊表格行並獲取所有單元格的值

我需要單擊一個表格行並獲取該行中每個單元格的值。這裏是我的表的格式:

<table class='list'> 
    <tr> 
     <th class='tech'>OCB</th> 
     <th class='area'>Area</th> 
     <th class='name'>Name</th> 
     <th class='cell'>Cell #</th> 
     <th class='nick'>Nickname</th> 
    </tr> 
    <tr onclick="somefunction()"> 
     <td>275</td> 
     <td>Layton Installation</td> 
     <td>Benjamin Lloyd</td> 
     <td>(801) 123-456</td> 
     <td>Ben</td> 
    </tr> 
</table> 

反正有沒有把每個單元格的唯一ID?

+0

你可以某種'這個for'循環。 – Sethen 2013-05-07 18:36:13

回答

10

沒有必要添加id或將多個事件處理程序添加到表中。一鍵式事件就是所需要的。你也應該使用表格的add和tbody來將標題從內容中分離出來。

HTML:

<table class='list'> 
    <thead> 
     <tr> 
      <th class='tech'>OCB</th> 
      <th class='area'>Area</th> 
      <th class='name'>Name</th> 
      <th class='cell'>Cell #</th> 
      <th class='nick'>Nickname</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>275</td> 
      <td>Layton Installation</td> 
      <td>Benjamin Lloyd</td> 
      <td>(801) 123-456</td> 
      <td>Ben</td> 
     </tr> 
    </tbody> 
</table> 

的JavaScript:

var table = document.getElementsByTagName("table")[0]; 
var tbody = table.getElementsByTagName("tbody")[0]; 
tbody.onclick = function (e) { 
    e = e || window.event; 
    var data = []; 
    var target = e.srcElement || e.target; 
    while (target && target.nodeName !== "TR") { 
     target = target.parentNode; 
    } 
    if (target) { 
     var cells = target.getElementsByTagName("td"); 
     for (var i = 0; i < cells.length; i++) { 
      data.push(cells[i].innerHTML); 
     } 
    } 
    alert(data); 
}; 

例子:

http://jsfiddle.net/ZpCWD/

+0

像冠軍一樣工作,並感謝 – 2013-05-07 19:23:54

+0

的例子,唯一的問題是它也獲得了html標籤之間的​​ – Gokigooooks 2015-04-22 18:23:10

+0

那麼OP的代碼中沒有任何標籤....如果是這樣的話有textContent ... – epascarello 2015-04-22 18:25:03

-1
var elements = document.getElementsByTagName('td'); 
for (var i =0; i < elements.length; i++) { 
    var cell_id = 'id' + i; 
    elements[i].setAttribute('id', cell_id); 
} 

也許把這樣的東西放在函數中,你的onclick鏈接從tr

+0

有沒有必要添加ID到一切。 – epascarello 2013-05-07 18:51:35

+0

@epascarello雖然這可能是真的,他的問題是否說有沒有把每個單元格的唯一ID?我只是回答它。 – aug 2013-05-07 19:00:19

1

檢查這個小提琴link

HTML:

<table id="rowCtr" class='list'> 
    <thead> 
     <tr> 
      <th class='tech'>OCB</th> 
      <th class='area'>Area</th> 
      <th class='name'>Name</th> 
      <th class='cell'>Cell #</th> 
      <th class='nick'>Nickname</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>275</td> 
      <td>Layton Installation</td> 
      <td>Benjamin Lloyd</td> 
      <td>(801) 123-456</td> 
      <td>Ben</td> 
     </tr> 
    </tbody> 
</table> 

JAVASCRIPT:

init(); 
function init(){ 

    addRowHandlers('rowCtr'); 

} 

function addRowHandlers(tableId) { 
    if(document.getElementById(tableId)!=null){ 
     var table = document.getElementById(tableId); 
     var rows = table.getElementsByTagName('tr'); 
     var ocb = ''; 
     var area = ''; 
     var name = ''; 
     var cell = ''; 
     var nick = ''; 
     for (var i = 1; i < rows.length; i++) { 

      rows[i].i = i; 
      rows[i].onclick = function() { 

       ocb = table.rows[this.i].cells[0].innerHTML;     
       area = table.rows[this.i].cells[1].innerHTML; 
       name = table.rows[this.i].cells[2].innerHTML; 
       cell = table.rows[this.i].cells[3].innerHTML; 
       nick = table.rows[this.i].cells[4].innerHTML; 
       alert('ocb: '+ocb+' area: '+area+' name: '+name+' cell: '+cell+' nick: '+nick); 
      }; 
     } 
    } 
} 
+0

@Cameron Darlington請讓我知道它是否滿足您的要求。謝謝。 – 2013-05-07 19:12:22

+0

謝謝這對我非常有幫助 – rajn 2018-02-27 00:36:23