jQuery DataTables:如何通过 tr 的行 ID 获取行索引(或 nNode)?

Posted

技术标签:

【中文标题】jQuery DataTables:如何通过 tr 的行 ID 获取行索引(或 nNode)?【英文标题】:jQuery DataTables: How to get row index (or nNode) by row id of tr? 【发布时间】: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") )

失败了?

【问题讨论】:

【参考方案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。 这行不通,因为它与他的原始代码具有相同的效果。

以上是关于jQuery DataTables:如何通过 tr 的行 ID 获取行索引(或 nNode)?的主要内容,如果未能解决你的问题,请参考以下文章

黄聪:Jquery+DataTables插件,如何在ajax调用服务器数据后,自动给tr添加id属性

jquery dataTables 怎么给tr id 赋值

jQuery DataTables:如果字符串存在于 <td> 中,如何将类添加到 <tr>?

如何修复移动设备上 jQuery DataTables 中的 scrollX 移动问题?

如何使用 jQuery DataTables 从所有页面提交复选框

默认选择一行并使用 jQuery DataTables 发送 XHR 请求