使用 Jquery 交换表的行

发布于 2024-12-19 14:25:52 字数 1476 浏览 4 评论 0原文

<tr id="r1">
  <td>1</td>
  <td>Some Text1</td>
  <td>Some Text1</td>
</tr>
<tr id="r2">
  <td>1</td>
  <td>Some Text2</td>
  <td>Some Text2</td>
</tr>
<tr id="r3">
  <td>3</td>
  <td>Some Text3</td>
  <td>Some Text3</td>
</tr>
<tr id="r4">
  <td>4</td>
  <td>Some Text4</td>
  <td>Some Text4</td>
</tr>
<tr id="r5">
  <td>5</td>
  <td>Some Text5</td>
  <td>Some Text5</td>
</tr>

我有一张表,其组织方式如图所示。我正在尝试做的事情是,使用用户输入切换这些表的行。

例如:当用户输入 r1 和 r3 时,这些表的 id 和“一些文本”部分应该更改,并且表应该如下所示。

<tr id="r3">
  <td>1</td>
  <td>Some Text3</td>
  <td>Some Text3</td>
</tr>
<tr id="r2">
  <td>1</td>
  <td>Some Text2</td>
  <td>Some Text2</td>
</tr>
<tr id="r1">
  <td>3</td>
  <td>Some Text1</td>
  <td>Some Text1</td>
</tr>
<tr id="r4">
  <td>4</td>
  <td>Some Text4</td>
  <td>Some Text4</td>
</tr>
<tr id="r5">
  <td>5</td>
  <td>Some Text5</td>
  <td>Some Text5</td>
</tr>

我尝试将一行的值放入临时变量并进行简单的交换,就像 OOP 中一样。然而 Jquery 不让我这样做:)。我可以做什么来解决这个问题?

<tr id="r1">
  <td>1</td>
  <td>Some Text1</td>
  <td>Some Text1</td>
</tr>
<tr id="r2">
  <td>1</td>
  <td>Some Text2</td>
  <td>Some Text2</td>
</tr>
<tr id="r3">
  <td>3</td>
  <td>Some Text3</td>
  <td>Some Text3</td>
</tr>
<tr id="r4">
  <td>4</td>
  <td>Some Text4</td>
  <td>Some Text4</td>
</tr>
<tr id="r5">
  <td>5</td>
  <td>Some Text5</td>
  <td>Some Text5</td>
</tr>

I have a table which is organized as shown. What i'm trying to do, switching the rows of these table with user input.

For example: when user enters r1 and r3 the id's of these tables and "some text" parts should be changed and table should look like this.

<tr id="r3">
  <td>1</td>
  <td>Some Text3</td>
  <td>Some Text3</td>
</tr>
<tr id="r2">
  <td>1</td>
  <td>Some Text2</td>
  <td>Some Text2</td>
</tr>
<tr id="r1">
  <td>3</td>
  <td>Some Text1</td>
  <td>Some Text1</td>
</tr>
<tr id="r4">
  <td>4</td>
  <td>Some Text4</td>
  <td>Some Text4</td>
</tr>
<tr id="r5">
  <td>5</td>
  <td>Some Text5</td>
  <td>Some Text5</td>
</tr>

I tried to take values of one row to a temp variable and make a simple swap just like in OOP. However Jquery didn't let me do it :). What can i do to fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幸福还没到 2024-12-26 14:25:52

要交换两个元素,可以使用以下逻辑:

  1. 在第二个元素后面插入临时占位符
  2. 将第二个元素移动到第一个元素后面
  3. 将占位符替换为第一个元素。

实现如下:

var $elem1 = $("#r3"),
    $elem2 = $("#r1"),
    $placeholder = $("<tr><td></td></tr>");
$elem2.after($placeholder);

$elem1.after($elem2);
$placeholder.replaceWith($elem1);

在前面的示例中,我对 ID 进行了硬编码。假设用户在 ID 为 fromto 的字段中输入 ID。然后,可以这样调整实现:

var $elem1 = $("#" + $("#from").val()),
    $elem2 = $("#" + $("#to").val()),
    // same as first example,from line 3

To swap two elements, the following logic can be used:

  1. Insert a temporary placeholder after the second element
  2. Move the second element after the first element
  3. Replace the placeholder with the first element.

The implementation goes as follows:

var $elem1 = $("#r3"),
    $elem2 = $("#r1"),
    $placeholder = $("<tr><td></td></tr>");
$elem2.after($placeholder);

$elem1.after($elem2);
$placeholder.replaceWith($elem1);

In the previous sample, I have hard-coded the IDs. Assume that the user enters the IDs in fields with IDs from and to. Then, the implementation can be adjusted in this way:

var $elem1 = $("#" + $("#from").val()),
    $elem2 = $("#" + $("#to").val()),
    // same as first example,from line 3
春风十里 2024-12-26 14:25:52

您可以使用 prepend 将所需的行推送到表的头部。

table.prepend($(selector)); 

一个简单的实现类似于这个

$(function(){
    var table = $('#table');
    $('#swapper').keyup(function(event) {
        var value = $(this).val();
        var selector = '#' + $.trim(value).replace(/\s+/, ',#');
        if(selector) {
           table.prepend($(selector));
        }
    });
})

You can use prepend to push the wanted rows to the head of the table.

table.prepend($(selector)); 

A simple implementation looks like this:

$(function(){
    var table = $('#table');
    $('#swapper').keyup(function(event) {
        var value = $(this).val();
        var selector = '#' + $.trim(value).replace(/\s+/, ',#');
        if(selector) {
           table.prepend($(selector));
        }
    });
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文