2012-02-11 68 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