我正在尝试在事件之后重新编号我的行,从给定的起始索引开始。这是我桌子的HTML:
<table id="table4">
<tr>
<td><span class='col1'>6</span></td>
<td>Score</td>
<td></td>
</tr>
</table>
我稍后会使用相同格式的jQuery添加行(第一列单元格将始终具有<span class='col1'></span>
标记)。
我正在尝试使用css选择器,但它不起作用(没有任何改变):
var startIndex = 6;
$("span .col1").text($(this).closest("tr").index() + startIndex);
这是正确的方法吗?我是一个jQuery noob。如果有更好的方法,我很乐意考虑更改我的代码结构。
答案 0 :(得分:1)
您的代码有两个问题:
通过在选择器"span .col1"
中添加一个空格,您将获得任何类型的所有元素,其中“col1”类是span元素的后代 - 在您的情况下是否元素。如果您删除空格:"span.col1"
,它将找到具有该类的所有范围。
this
在你使用它的地方与你选择的元素没有任何关系,它会是别的,虽然我不能说是什么,因为它取决于代码所在的位置你已经证明了(在一个函数?Global?)。
我是这样做的:
var startIndex = 6;
$("span.col1").text(function() {
return $(this).closest("tr").index() + startIndex;
});
演示:http://jsfiddle.net/sLg7h/1/
(虽然我可能会说...closest("tr")[0].rowIndex
,因为它会直接获取索引,而不是让jQuery用.index()
计算出来。)
.text()
方法接受将为每个匹配元素调用的函数,其中函数的返回将成为当前元素的新文本。更常见的是,您将使用该函数的参数来获取旧文本值并对其执行某些操作,但在这种情况下,您当然只想设置一个数字,以便旧值无关紧要。虽然您使用this
的位置存在问题,但在传递给.text()
的回调函数中,jQuery会将this
设置为当前元素。
此外,您可能并不真正需要span元素:您可以<td class="col1">
并选择td.col1
,但如果您使用选择器"tr td:first-child"
,则不需要获得每一行中的第一个td ......