1

我有一个 4 列和几行的 html 表。行需要是可排序的(我使用的是 jquery ui 可排序的),但是外部左 td 永远不应该移动。所以基本上我希望能够移动该行而不移动该行中的外部左 td。我试图弄乱项目选项和取消方法,但没有成功。我查找了类似的线程,但我的目标不是让每个 td 都可排序:

jquery可使用多个tbody排序

如何使 <tr> 中的单个 <td> 元素不可排序(jquery ui)

这可以使用可排序吗?如果有人能指出我正确的方向,我将不胜感激。

我的标记:

<table>
    <tr class="head_row">
    <td>Counter</td>
        <td>Position</td>
        <td>Note</td>
        <td>Visible</td>
    </tr>
    <tbody class="sort">
        <tr>
            <td>1</td>
            <td>1</td>
            <td>TEST1</td>
            <td>Y</td>
     </tr>
     <tr>
            <td>2</td>
            <td>1</td>
            <td>TEST2</td>
            <td>Y</td>
    </tr>
    <tr>
            <td>3</td>
            <td>1</td>
            <td>TEST3</td>
            <td>Y</td>
   </tr>

   </tbody>

jQuery:

$(function(){
    $(".sort").sortable({
        helper: fixWidth,
        revert : true,
        cursor: "move",
        opacity: 0.5
    });
});


// fixes the width of the table rows while sorting
    var fixWidth = function(e, tr) {
        var $originals = tr.children();
        var $helper = tr.clone();
        $helper.children().each(function(index)
        {
          $(this).width($originals.eq(index).width())
        });
        return $helper;
    };

这是我到目前为止所拥有的链接:

http://jsfiddle.net/zSzks/2/

在这种情况下,“计数器”列不应移动。

谢谢你,莫妮卡

4

1 回答 1

3

一种方法——实际上不是最聪明的——可能是将 Counter 部分分离到另一个表中。它看起来和你想要的一样工作,但正如我所说,我认为这不是解决你的问题的最聪明的方法。

无论如何,看看我做了什么:jsfiddle

HTML

<table id="counterTable">
    <thead>
        <tr class="head_row">
            <th>Counter</th>
        </tr>
    </thead>
    <tbody class="fake">
        <tr>
            <td>1</td>
        </tr>
        <tr>
            <td>2</td>
        </tr>
        <tr>
            <td>3</td>
        </tr>
    </tbody>
</table>

CSS

#counterTable {
    float: left;
    /* to hide the noticeable difference between the 2 tables */
    margin-right: -2px;
}
.sort td, .fake td {
    border: 1px solid;
    width: 100px;
}

顺便说一句,您通常应该将表格标题包装在<th>标签中,以便您的标题(如 Counter、Position、Note...)可以识别为标题。

编辑(解决方案)

updated fiddle

$(".sort").sortable({
    //other config
    update: function (event, ui) {
        $('.sort > tr .counter').each(function (index) {
            $(this).text(index + 1);
        });
    }
});
于 2013-05-07T15:14:39.550 回答