1

我有一个 jquery 脚本来控制表行(tr)向上/向下移动。

脚本

$(document).ready(function()
{
$('#mytable a.move').click(function() 
{
    var row = $(this).closest('tr');

if ($(this).hasClass('up'))
{
    row.prev().before(row);
}
else
    row.next().after(row);
});

});

HTML

<table cellspacing="1" cellpadding="1" width="250" align="left" 
bgcolor="#eeeeee"  border="0" id="mytable">
<thead>
<tr class="tablebody">
  <th width="21" class="tablehead">S.No</th>
  <th width="119" class="tablehead">levels</th>
  <th width="100" class="tablehead">Sort</th>
</tr>
</thead>
<tbody>
<tr class="tablebody" id="status2">
  <td class="tdValue"> 1 </td>
  <td>level - 1 </td>
  <td width="100"><a class="move up" href="javascript:void(0)"><img src="images1/arrow_up.gif" alt="Up" width="11" height="13" border="0" /></a> <a class="move down" href="javascript:void(0)"><img src="images1/arrow_down.gif" alt="down" width="11" height="13" border="0" /></a> </td>
</tr>

<tr class="tablebody" id="status3">
  <td class="tdValue">  2 </td>
  <td>level - 2 </td>
  <td width="100"><a class="move up" href="javascript:void(0)"><img src="images1/arrow_up.gif" alt="Up" width="11" height="13" border="0" /></a> <a class="move down" href="javascript:void(0)"><img src="images1/arrow_down.gif" alt="down" width="11" height="13" border="0" /></a> </td>
</tr>
</tbody>
 </table>

我可以将 tr 向上/向下移动“n”个 TD。但是,在完成 tr up/down 后,无法将 s.no 2 更改为 1。

或者我只想向上/向下移动两个 TD(级别和排序)而不是 S.no TD

请向我提供此问题的详细步骤。

4

2 回答 2

2

你可以试试这个

$(document).ready(function()
{
    $('#mytable a.move').click(function()
    {
        var row = $(this).closest('tr');

        if ($(this).hasClass('up'))
        {
            var preTr = row.prev(); // Get Previous TR
            var prevSN = preTr.find('td:eq(0)').html(); // Get Previous TR S.No
            row.find('td:eq(0)').html(prevSN); // Set To Current Row S.No
            preTr.find('td:eq(0)').html(Number(prevSN)+1); // Set To Previos S.No, Previous + 1
            preTr.before(row); //Change in DOM
        }
        else
        {
            var nextTr = row.next(); // Get Next TR
            var nextSN = nextTr .find('td:eq(0)').html(); // Get Next S.No
            row.find('td:eq(0)').html(nextSN ); // Set Next S.No. To Current Tr
            nextTr.find('td:eq(0)').html(Number(nextSN)-1); // Set Next S.No -1 To Next Tr
            nextTr.after(row); //Change in DOM
        }
    });

});

检查这个快速演示

于 2012-09-06T07:21:09.580 回答
2

您可以使用该.find()方法获取"tdValue"每行中带有类的 td 元素,然后使用该.html()方法获取和设置它们的值:

$(document).ready(function() {
    $('#mytable a.move').click(function() {
        var up = $(this).hasClass('up'),
            thisRow = $(this).closest('tr'),
            thisTD = thisRow.find(".tdValue")
            thisSNo = thisTD.html(),
            otherRow = thisRow[up?"prev":"next"](),
            otherTD = otherRow.find(".tdValue");

        if(otherRow.length){
            thisTD.html(otherTD.html());
            otherTD.html(thisSNo);
            otherRow[up?"before":"after"](thisRow);
        }
    });
});

测试if(otherRow.length)是为了避免尝试从底行向下或从顶行向上。

演示:http: //jsfiddle.net/nnnnnn/mKq5S/

于 2012-09-06T07:40:18.443 回答