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

时间:2011-10-09 11:27:24

标签: javascript jquery html dom

基本上我需要做的是“移动”一个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。

6 个答案:

答案 0 :(得分:4)

普通的js方式是:

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

答案 1 :(得分:3)

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

通常,如果您想要更多元素,同时保留其所有数据,则应使用jQuery .detach()方法 [docs] 。将元素从当前位置分离后,可以将其插入新元素中。

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

  

如果以其他方式选择了以这种方式选择的单个元素,它将被移动到目标中(未克隆):

答案 2 :(得分:3)

另一种方式:

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

或者您也可以这样做:

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

因为ID应该是唯一的。

请注意,虽然您未指定tbody元素,但浏览器始终插入一个元素。这就是为什么你不能只将行添加到table元素。

更新:说实话,事实上你可以像@ŠimeVidas指出的那样。

参考: prepend

答案 3 :(得分:2)

jQuery prepend

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

答案 4 :(得分:0)

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

可能是最简单的方式

答案 5 :(得分:0)

喜欢这个? :

$("#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/