25

I would like to remove the parent without removing the child - is this possible?

HTML structure:

<div class="wrapper">
  <img src"">
</div>
<div class="button">Remove wrapper</div>

After clicking on the button I would like to have:

<img src"">
<div class="button">Remove wrapper</div>
4

7 に答える 7

34

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'));
于 2015-10-28T21:29:49.443 に答える
10

この API を使用できます: http://api.jquery.com/unwrap/

デモ http://jsfiddle.net/7GrbM/

.unwrap

コードは次の行に表示されます。

サンプルコード

$('.button').click(function(){
    $('.wrapper img').unwrap();
});
于 2013-10-09T01:01:14.953 に答える
6

純粋な 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;
}

JSFIDDLE

于 2013-10-09T01:11:48.170 に答える
-2

ラッパー要素にテキストが含まれている場合、テキストは子ノードに残ります。

于 2016-04-25T12:13:15.893 に答える