如果沒有別的比ID等來區分你的節點,並考慮到
#original
具有多個子節點,它很可能是簡單的創建一個新的父節點,並插入:
var original = document.getElementById('original');
var parent = original.parentNode;
var wrapper = document.createElement('DIV');
parent.replaceChild(wrapper, original);
wrapper.appendChild(original);
然後將ID來對地方了:
wrapper.id = original.id;
original.id = 'wrapper';
指出,當然,這兩個變量
original
和
wrapper
現在在「W點數榮「元素。哦,你想留下聽衆...技術上,他們仍然是,但他們現在連接到內部元素,而不是外部元素。
EDIT 2修訂後的答案,留下附着於原始元素的事件監聽器(即現在的外層div):
var original = document.getElementById('original');
var wrapper = document.createElement('DIV');
wrapper.id = 'wrapper';
while (original.firstChild) {
wrapper.appendChild(original.firstChild);
}
original.appendChild(wrapper);
這工作簡單地通過連續的每個子節點遷出原來的div進入新的父母,然後將新的父母移回原來的孩子。
這個答案的前一個版本的缺點是,你必須逐個遍歷所有的孩子。
用於演示
這是不夠的 - 有'#wrapper' – Alnitak
的多個子節點,這將徹底摧毀任何附加事件偵聽器。使用序列化('.innerHTML')來操作DOM元素幾乎總是錯誤的。它只能用於創建全新的元素。 – Alnitak