我通过这样做得到一行的索引:
row.parent().children("tr").index(row)
有没有更有效的方法来查找索引?我有数百行,所以我必须选择所有行才能找到索引,这会扼杀我的表现。
我通过这样做得到一行的索引:
row.parent().children("tr").index(row)
有没有更有效的方法来查找索引?我有数百行,所以我必须选择所有行才能找到索引,这会扼杀我的表现。
怎么样row.prevAll().length
?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" charset="utf-8" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
console.log($("tr").index($("#my")));
})
</script>
</head>
<body>
<table border="0" cellspacing="5" cellpadding="5" id="tbl">
<tr><th>Header</th></tr>
<tr><td>Data</td></tr>
<tr id="my"><th>Header</th></tr>
<tr><th>Header</th></tr>
<tr><td>Data</td></tr>
</table>
</body>
</html>
希望有帮助。干杯。
Id 属性是解析任何 html 的最快方法。您可以为所有行提供一个 ID。
虽然 index 方法将确定兄弟元素之间的索引,这可能会更快
row.parent("tr").index();
如果您以某种方式获取对行的引用(单击处理程序等),那么在查找该元素时没有额外的开销,只是.index()
它和利润(尽管注意多个tbody
有效但会增加脚本复杂性的元素)
如果您在运行时索引所有 tr
元素,不妨将其缓存在 jquery 数据中以备将来使用!
这里最快的方法可能是使用纯 javascript:
function getRowIndex(elem) {
var index = 0;
while (elem = elem.previousSibling) {
if (elem.tagName == "TR") {
++index;
}
}
return(index);
}
工作演示:http: //jsfiddle.net/jfriend00/y4anN/
如果您必须在没有动态更改的大表上重复执行此操作,那么您可以使用自定义属性对行进行一次预编号,从那时起,您只需从任何行。
You would pre-number all the rows with a custom attribute like this:
function numberRows(table) {
var rows = table.getElementsByTagName("tr");
for (var i = 0; i < rows.length; i++) {
rows[i].dataIndex = i;
}
}
And, then you can just obtain the index number from any given row like this:
row.dataIndex
Working demo: http://jsfiddle.net/jfriend00/CR2Wk/