2012-02-11 89 views
0

如果我有一個如下的身體...我知道,如果我點擊第一個廣播,它將返回1.如果我單擊表格外部的那個,它將返回2.但是當我單擊嵌套表的第一個td,它將返回其索引以及兩個警報中的父'td索引。我怎樣才能返回應該是2的嵌套TD索引?這只是一個動態構建的示例表結構,因此它需要幾乎適用於任何表設計和任何td。獲取td的節點索引

有什麼建議嗎?
這是我使用時用戶點擊一個TD返回的索引的代碼(I捕獲其他索引的輸入,文本區域等):

 $("td").click(function (event) { 
      var nodeIndex = $("td").index(); 
      var nodeName = $(this).get(0).nodeName 
      alert(nodeName + "," + nodeIndex); 
     }); 

這是樣品體:

<body> 
    <input type="radio" /> 
     <table class="parent_table"> 
      <tr> 
       <td> 
        <table class="nested_table"> 
         <tr> 
          <td> 
           Sample Text</td> 
          <td> 
           &nbsp;</td> 
         </tr> 
        </table> 
       </td> 
       <td> 
        &nbsp;</td> 
      </tr> 
     </table> 
     <input type="radio" /> 
    </body> 

回答

0

已解決。我只是把TD成爲一個全球性的點擊,然後是能夠記錄在消除雙重警報的一個事件的節點名和索引....

jQuery('td').live('click', function (event) { 

    if (event.target.nodeName.toLowerCase() == "td") { 
     var nodeIndex = $("td").index(this); 
     var nodeName = $(this).get(0).nodeName 
     alert(nodeName + "," + nodeIndex); 
    } 

}); 
0

這是罪魁禍首,它要求所有<td>小號

var nodeIndex = $("td").index(); 

替換爲:

var nodeIndex = $(this).index(); 
+0

@elckabnrs對不起,我可能沒有clear..It的仍然冒出第二次警報。我需要抑制從底部拾取td的點擊。 – Rob 2012-02-11 05:09:06

+0

什麼?不明白。你能爲我更清楚嗎? – elclanrs 2012-02-11 05:17:42

+0

我正在看http://stackoverflow.com/questions/1967537/how-to-stop-event-bubbling-with-jquery-live並嘗試e.stopImmediatePropagation(); 並且它仍然不起作用。 – Rob 2012-02-11 05:25:49

0

表已經具有便利性cellIndextd,並rowIndextr。這意味着你不需要使用jQuery。

相反,嘗試這樣的事情(這是更有效的反正):

// set ID "parent_table" on the parent table, then... 
document.getElementById('parent_table').onclick = function(e) { 
    e = e || window.event; 
    var t = e.srcElement || e.target; 
    while(t != this && (!t.tagName || t.tagName != "TD")) t = t.parentNode; 
    if(t.tagName == "TD") { 
     alert("You clicked on cell number "+t.cellIndex+" in row number "+t.parentNode.rowIndex); 
    } 
} 

論更有效率最高,它避免了你通過把jQuery的混亂。當你在你的代碼中點擊一個嵌套的TD時,你實際上點擊父表的TD以及嵌套的TD,所以你得到兩個警報。在這裏,你只會得到一個。

+0

這不是cellindex,而是頁面中td的層次結構,所以如果表/頁中有10個td,並且我點擊了第8個,它將返回8.但是如果表在另一個表中,會發生什麼?單元格8,然後是嵌套表格的父級單元格。 – Rob 2012-02-11 12:58:31

+0

你仍然可以使用我的代碼。只需更換'alert'行,並找出變量't'中單元格的索引。由於事件處理程序只在一個元素上註冊,並且一直運行到最近的表格單元格,所以每次點擊只能獲得一個警報。 – 2012-02-11 19:59:27