如何删除() HTML 元素然后添加() 它?

发布于 2024-12-08 15:47:55 字数 343 浏览 0 评论 0原文

基本上我需要做的是“移动”一个 HTML 元素,不是按位置移动,而是按 DOM 结构的位置移动。

例如,

<table id="main">
<tr id="row1"><td></td></tr>
<tr id="row2"><td></td></tr>
<tr id="row3"><td></td></tr>
</table>

如何将“tr#row3”移动到“table#main”的顶部? 可以使用jQuery。

Basically what I need to do is to "move" an HTML element, not position-wise but location of it's DOM structure.

Eg

<table id="main">
<tr id="row1"><td></td></tr>
<tr id="row2"><td></td></tr>
<tr id="row3"><td></td></tr>
</table>

How do I move "tr#row3" to the top of "table#main"?
Can use jQuery.

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

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

发布评论

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

评论(6

沧笙踏歌 2024-12-15 15:47:55

简单的js方式是:

var row = document.getElementById('row3');
var parent = row.parentNode;
parent.insertBefore(row, parent.firstChild);

The plain js way is:

var row = document.getElementById('row3');
var parent = row.parentNode;
parent.insertBefore(row, parent.firstChild);
北渚 2024-12-15 15:47:55

另一种方式:

$('#main tbody').prepend(function() {
    return $(this).find('#row3');
});

或者你也可以这样做:

$('#main tbody').prepend($('#row3'));

因为 ID 应该是唯一的。

请注意,虽然您没有指定 tbody 元素,但浏览器总是会插入一个元素。这就是为什么您不能只将行添加到 table 元素的前面。

更新:正确地说,事实上你可以,正如 @Šime Vidas 指出的那样。

参考: 前置

Another way:

$('#main tbody').prepend(function() {
    return $(this).find('#row3');
});

or you could also do:

$('#main tbody').prepend($('#row3'));

as IDs are supposed to be unique.

Note that although you don't specify a tbody element, the browser will always insert one. That's why you cannot just prepend the row to the table element.

Update: To be correct, in fact you can, as @Šime Vidas pointed out.

Reference: prepend

城歌 2024-12-15 15:47:55
var row = table.find("#row3");
var parent = row.parent(); // because parent may not be #main
parent.prepend(row.detach());

一般来说,如果您想要添加一个元素,同时保留其所有数据,您应该使用 jQuery .detach() 方法 [文档]。一旦将元素从当前位置分离,就可以将其插入到新位置。

但是在这种情况下 .prepend().append() 实际上会默认执行您想要的操作,因此 .detach() 不是没有必要。来自文档:

如果以这种方式选择的单个元素插入到其他地方,它将被移动到目标中(而不是克隆):

var row = table.find("#row3");
var parent = row.parent(); // because parent may not be #main
parent.prepend(row.detach());

In general if you want to more an element, while preserving all of its data, you should use the jQuery .detach() method [docs]. Once you detach the element from its current location it can be inserted into the new one.

However in this case .prepend() and .append() will actually do what you want by default, so .detach() isn't necessary. From the docs:

If a single element selected this way is inserted elsewhere, it will be moved into the target (not cloned):

心清如水 2024-12-15 15:47:55

jQuery 前置

var el = $('#row3');
$('#main').prepend(el);

jQuery prepend

var el = $('#row3');
$('#main').prepend(el);
傲鸠 2024-12-15 15:47:55
var row3 = $("tr#row3")
$("#main").prepend(row3);
row3.remove();

可能是最简单的方法

var row3 = $("tr#row3")
$("#main").prepend(row3);
row3.remove();

is probably the easiest way

萌︼了一个春 2024-12-15 15:47:55

像这样 ? :

$("#row3").mouseenter(function () {
    $("#row1").before($(this)); 
})

小提琴 : http://jsfiddle.net/Z3VrV/1/

或者这个 :

$("#row3").click(function () {
    $(this).parent(":first-child").before($(this)); 
})

小提琴 : http://jsfiddle.net/Z3VrV/2/

Like this ? :

$("#row3").mouseenter(function () {
    $("#row1").before($(this)); 
})

Fiddle : http://jsfiddle.net/Z3VrV/1/

Or this :

$("#row3").click(function () {
    $(this).parent(":first-child").before($(this)); 
})

Fiddle : http://jsfiddle.net/Z3VrV/2/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文