jQuery:通过更改第一列的值重新编号所有行

时间:2012-02-24 23:45:49

标签: jquery

我正在尝试在事件之后重新编号我的行,从给定的起始索引开始。这是我桌子的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。如果有更好的方法,我很乐意考虑更改我的代码结构。

1 个答案:

答案 0 :(得分:1)

您的代码有两个问题:

  1. 通过在选择器"span .col1"中添加一个空格,您将获得任何类型的所有元素,其中“col1”类是span元素的后代 - 在您的情况下是元素。如果您删除空格:"span.col1",它将找到具有该类的所有范围。

  2. this在你使用它的地方与你选择的元素没有任何关系,它会是别的,虽然我不能说是什么,因为它取决于代码所在的位置你已经证明了(在一个函数?Global?)。

  3. 我是这样做的:

    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 ......