Javascript 如何删除()一个HTML元素,然后在它前面加上()前缀?

Javascript 如何删除()一个HTML元素,然后在它前面加上()前缀?,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,基本上,我需要做的是“移动”一个HTML元素,而不是按位置移动,而是移动它的DOM结构的位置 乙二醇 如何将“tr#row3”移动到“table#main”的顶部? 可以使用jQuery var row3 = $("tr#row3") $("#main").prepend(row3); row3.remove(); 这可能是最简单的方法 var row = table.find("#row3"); var parent = row.parent(); // because parent m

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

乙二醇


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

var row3 = $("tr#row3")
$("#main").prepend(row3);
row3.remove();
这可能是最简单的方法

var row = table.find("#row3");
var parent = row.parent(); // because parent may not be #main
parent.prepend(row.detach());
通常,如果您希望在保留元素的所有数据的同时增加元素的数量,那么应该使用jQuery
.detach()
方法[]。从当前位置拆离图元后,可以将其插入新的图元中

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

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

另一种方式:

$('#main tbody').prepend(function() {
    return $(this).find('#row3');
});
或者你也可以这样做:

$('#main tbody').prepend($('#row3'));
因为ID应该是唯一的

请注意,尽管您没有指定
tbody
元素,但浏览器始终会插入一个。这就是为什么不能将行前置到
元素的原因

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

参考:

简单的js方式是:

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

$("#row3").mouseenter(function () {
    $("#row1").before($(this)); 
})
小提琴:

或者这个:

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

Fiddle:

请注意,prepend将移动它,而不是复制它。这是所需的功能。
table.prepend(行)
可能无法工作,因为每一行都在
t正文中。Try
table.find('tbody').prepend(行)@FelixKling:很好。我现在在
.detach()
ing之前抓取父对象。您不能将选择器传递给
.prepend
,而且您可以完全删除
行3
@西梅维达斯:很有趣。但我认为这只是浏览器纠正了这一点。最简洁的答案是:$('main tbody')。prepend($('row3'));
$("#row3").mouseenter(function () {
    $("#row1").before($(this)); 
})
$("#row3").click(function () {
    $(this).parent(":first-child").before($(this)); 
})