我想删除父元素而不删除子元素 - 这可能吗?
HTML结构:
<div class="wrapper">
<img src"">
</div>
<div class="button">Remove wrapper</div>
点击按钮后,我希望得到:
<img src"">
<div class="button">Remove wrapper</div>
我想删除父元素而不删除子元素 - 这可能吗?
HTML结构:
<div class="wrapper">
<img src"">
</div>
<div class="button">Remove wrapper</div>
点击按钮后,我希望得到:
<img src"">
<div class="button">Remove wrapper</div>
我认为纯JS(ES2015)方案比jQuery方案更易读。
node.replaceWith(...node.childNodes)
Node必须是一个ElementNode
const wrapperNode = document.querySelector('h1')
wrapperNode.replaceWith(...wrapperNode.childNodes)
<h1>
<a>1</a>
<b>2</b>
<em>3</em>
</h1>
node.replaceWith(...Array.from(node.children));
};```
翻译:这段代码定义了一个名为 "unwrap" 的函数,它接受一个 "Element" 类型的参数 "node"。该函数将 "node" 元素的所有子元素替换为自身,并返回新的子节点数组。
- Shnigi不使用 innerHTML 的纯JS解决方案:
function unwrap(wrapper) {
// place childNodes in document fragment
var docFrag = document.createDocumentFragment();
while (wrapper.firstChild) {
var child = wrapper.removeChild(wrapper.firstChild);
docFrag.appendChild(child);
}
// replace wrapper with document fragment
wrapper.parentNode.replaceChild(docFrag, wrapper);
}
unwrap(document.querySelector('.wrapper'));
docFrag.appendChild(wrapper.firstChild);
会自动将节点从当前位置移动到新位置。在MDN上阅读更多关于appendChild的内容 - Robbendebiene很惊讶没有人发布最简单的答案:
// Find your wrapper HTMLElement
var wrapper = document.querySelector('.wrapper');
// Replace the whole wrapper with its own contents
wrapper.outerHTML = wrapper.innerHTML;
可以使用此API:http://api.jquery.com/unwrap/
.unwrap
代码如下:
示例代码
$('.button').click(function(){
$('.wrapper img').unwrap();
});
$('.wrapper').children().unwrap();
- PSL:)
您的+1被优雅地接受了,为OP提供更多的内容,干杯! - Tats_innit$('.wrapper').contents().unwrap();
。 - Andrew Cheong纯JavaScript解决方案,我相信有人可以进一步简化它,但这是一种纯JavaScript的选择。
HTML
<div class="button" onclick="unwrap(this)">Remove wrapper</div>
Javascript(纯净版)
function unwrap(i) {
var wrapper = i.parentNode.getElementsByClassName('wrapper')[0];
// return if wrapper already been unwrapped
if (typeof wrapper === 'undefined') return false;
// remmove the wrapper from img
i.parentNode.innerHTML = wrapper.innerHTML + i.outerHTML;
return true;
}
innerHTML
是不好的,它会删除 HTML 中所有的事件。 - dude$(".wrapper").replaceWith($(".wrapper").html());