如何删除将其子节点保留在javascript中的子节点?

如何删除将其子节点保留在javascript中的子节点?,javascript,Javascript,我的javascript不太好。 我有这样一个DOM结构: <div data-embed-url="https://www.youtube.com/watch?v=5DkrwfY2jw4"> <div class="black"> <div> <div style="left: 0px; width: 100%; height: 0px; position: relative; padding-bottom: 56.2493%;">

我的javascript不太好。 我有这样一个DOM结构:

<div data-embed-url="https://www.youtube.com/watch?v=5DkrwfY2jw4">
 <div class="black">
  <div>
   <div style="left: 0px; width: 100%; height: 0px; position: relative; padding-bottom: 56.2493%;">
     <iframe allowfullscreen="" frameborder="0" src="https://www.youtube.com/embed/5DkrwfY2jw4"></iframe>
   </div>
  </div>
 </div>
var black = document.querySelector('div.black');
var divToKeep = black.children[0].children[0]; 
black.parentNode.replaceChild(divToKeep, black);


如何删除类为“black”的节点和没有样式和类的div并保留其他节点?

假设您使用的是ES5:

// Find the `.black`
var black = document.querySelector('.black');

// Replace `.black` with its first child
black.parentNode.replaceChild(black.firstChild, black);

假设您正在使用ES5:

// Find the `.black`
var black = document.querySelector('.black');

// Replace `.black` with its first child
black.parentNode.replaceChild(black.firstChild, black);

您应该在div上使用ID来操作DOM。ID是唯一的。不鼓励使用类,因为您可以在多个DOM节点上使用类

// Removing a specified element when knowing its parent node
var d = document.getElementById("top");
var d_nested = document.getElementById("nested");
var throwawayNode = d.removeChild(d_nested);
更多信息:

使用具有div ID的代码的示例:

//在知道指定元素的父节点时删除该元素
var d=document.getElementById(“blackId”);
var d_nested=document.getElementById(“blackChildId”);
var div_i_want=d_nested.innerHTML;
警报('BEFORE:'+d.innerHTML);
var throwayNode=d.removeChild(d_嵌套);
d、 innerHTML=div_i_want;
警报('AFTER:'+d.innerHTML)

您应该使用div上的ID来操作DOM。ID是唯一的。不鼓励使用类,因为您可以在多个DOM节点上使用类

// Removing a specified element when knowing its parent node
var d = document.getElementById("top");
var d_nested = document.getElementById("nested");
var throwawayNode = d.removeChild(d_nested);
更多信息:

使用具有div ID的代码的示例:

//在知道指定元素的父节点时删除该元素
var d=document.getElementById(“blackId”);
var d_nested=document.getElementById(“blackChildId”);
var div_i_want=d_nested.innerHTML;
警报('BEFORE:'+d.innerHTML);
var throwayNode=d.removeChild(d_嵌套);
d、 innerHTML=div_i_want;
警报('AFTER:'+d.innerHTML)

如果您打算删除两个
div
元素,同时保留嵌套内容(以简化嵌套),那么您可以使用
.replaceChild()
如下所示:

<div data-embed-url="https://www.youtube.com/watch?v=5DkrwfY2jw4">
 <div class="black">
  <div>
   <div style="left: 0px; width: 100%; height: 0px; position: relative; padding-bottom: 56.2493%;">
     <iframe allowfullscreen="" frameborder="0" src="https://www.youtube.com/embed/5DkrwfY2jw4"></iframe>
   </div>
  </div>
 </div>
var black = document.querySelector('div.black');
var divToKeep = black.children[0].children[0]; 
black.parentNode.replaceChild(divToKeep, black);

如果您打算删除两个
div
元素,同时保留嵌套内容(以简化嵌套),则可以使用
.replaceChild()
,如下所示:

<div data-embed-url="https://www.youtube.com/watch?v=5DkrwfY2jw4">
 <div class="black">
  <div>
   <div style="left: 0px; width: 100%; height: 0px; position: relative; padding-bottom: 56.2493%;">
     <iframe allowfullscreen="" frameborder="0" src="https://www.youtube.com/embed/5DkrwfY2jw4"></iframe>
   </div>
  </div>
 </div>
var black = document.querySelector('div.black');
var divToKeep = black.children[0].children[0]; 
black.parentNode.replaceChild(divToKeep, black);

那些代码> >代码>元素,你认为“空”,它们都有我所能看到的内容。顺便说一句,由于某种原因,
元素的开始标记末尾有一个不正确的引号。@DavidThomas抱歉,我修改了代码。我需要在没有任何样式或类的情况下删除div没有问题,如果您的代码没有其他错误,它只会帮助您避免问题的复杂性:)那么,您要删除的元素是
及其子元素
?显示您希望最终结果的样子。您可以使用jQuery吗?它有一个方法>代码> unReAPP()/代码>,它将删除一个容器元素并留下内容。这些代码> >代码>元素中的哪一个你认为是“空的”,它们都有我所能看到的内容。顺便说一句,由于某种原因,
元素的开始标记末尾有一个不正确的引号。@DavidThomas抱歉,我修改了代码。我需要在没有任何样式或类的情况下删除div没有问题,如果您的代码没有其他错误,它只会帮助您避免问题的复杂性:)那么,您要删除的元素是
及其子元素
?显示您希望最终结果的样子。您可以使用jQuery吗?它有一个方法
.unWrap()
,该方法将删除容器元素并保留内容。哦,这与ES5无关,它是纯javascript(就像在主机脚本中一样)。;-)@RobG
var
part实际上与ES5有关。我有一段时间没有使用
var
,我完全不喜欢这个关键字,这就是我提到ES5的原因:)哦,这与ES5无关,它是纯javascript(就像在主机脚本中一样)。;-)@RobG
var
part实际上与ES5有关。我有一段时间没有使用
var
,我完全不喜欢这个关键词,这就是为什么我提到ES5:)