子を削除せずに親を削除したいのですが、これは可能ですか?
HTML構造:
<div class="wrapper">
<img src"">
</div>
<div class="button">Remove wrapper</div>
ボタンをクリックした後、私は欲しいです:
<img src"">
<div class="button">Remove wrapper</div>
このAPIを使用できます: http://api.jquery.com/unwrap/
.unwrap
コードは次の行に表示されます。
サンプルコード
$('.button').click(function(){
$('.wrapper img').unwrap();
});
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'));
誰も最も簡単な答えを投稿していないことに驚いた:
// Find your wrapper HTMLElement
var wrapper = document.querySelector('.wrapper');
// Replace the whole wrapper with its own contents
wrapper.outerHTML = wrapper.innerHTML;
純粋なJS(ES6)ソリューション、私の意見では、jQueryソリューションよりも読みやすいです。
function unwrap(node) {
node.replaceWith(...node.childNodes);
}
ノードはElementNodeである必要があります
純粋な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;
}
jQueryを使用している場合:
$(".wrapper").replaceWith($(".wrapper").html());
今日ではもっと簡単です:
function unwrap (node: Element) {
node.after(...Array.from(node.childNodes))
node.remove()
}