【问题标题】:jQuery DataTables: How to get row index (or nNode) by row id of tr?jQuery DataTables:如何通过 tr 的行 ID 获取行索引(或 nNode)?
【发布时间】:2011-11-22 03:07:48
【问题描述】:

我有一个数据表<table id="myTable">。我想fnUpdate()fnDestroy() 我的行。每行都有一个 id,例如:<tr id="16">。 对于fnUpdate()/fnDestroy() 适当的<tr>,我需要获取该行的索引。为此我尝试使用fnGetPosition(),但我尝试的方式不是这样做的:

$("#myTable").fnGetPosition( $("#16") )

结果

TypeError: nNode.nodeName 未定义 [Break On This Error] var sNodeName = nNode.nodeName.toUpperCase();

这是有道理的,因为fnGetPosition() expexts nNode(在我的例子中是一个 HTMLTableRowElement)。

如何获得具有 id="16" 的 HTMLTableRowElement?

编辑: 我的问题的正确答案是:document.getElementById("16")。基于此,我想将我的问题改为:

为什么

$("#myTable").fnGetPosition( document.getElementById("16") ) 

工作,但是

$("#myTable").fnGetPosition( $("#16") )

失败了?

【问题讨论】:

    标签: javascript jquery css dom datatables


    【解决方案1】:

    对于仍有此问题的任何人,请尝试以下操作:

    $("#myTable").fnGetPosition( $("#16")[0] )
    

    要获得与document.getElementById 相同的结果,您应该访问 jQuery 对象中的第一个元素。

    【讨论】:

      【解决方案2】:

      document.getElementById() 返回一个 DOM 对象,并且 DOM 对象上的所有内容本质上都是可访问的。

      JQuery 的 $('#...') 返回围绕单个 DOM 对象或一组 DOM 对象(取决于选择器)的包装器,因此,它不返回实际的 DOM 对象。它使处理 DOM 对象变得更加容易。

      您在第二种情况下收到该错误的原因是 $(#...) 实际上不是 DOM 对象。

      【讨论】:

      • 哦,谢谢。有一个 get() 方法来检索与 jQuery 对象匹配的 DOM 元素。所以 $('#16').get() 应该等同于 document.getElementById("16") 对于我的目的,还是我错过了什么?
      • 是的,根据 Jquery API,它返回指定选择器匹配的 DOM 元素:api.jquery.com/get
      【解决方案3】:

      你应该这样做:

      var oTable = $('#myTable').dataTable();
      oTable.fnGetPosition( $("#myTable #16") );
      

      【讨论】:

      • 嗯,这给了我同样的 TypeError。而且我认为$("#myTable #16")$("#16") 相比没有任何改进,因为#16 已经是一个唯一标识符,而我仍然没有用于fnGetPosition() 的HTMLTableRowElement。
      • 这行不通,因为它与他的原始代码具有相同的效果。
      猜你喜欢
      • 2013-03-17
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多