Javascript 获取意外错误:未能设置';外层TML';在'上的属性;元素';:此元素没有父节点

Javascript 获取意外错误:未能设置';外层TML';在'上的属性;元素';:此元素没有父节点,javascript,Javascript,我有一个功能,只播放视频mp4文件的音频。。。函数的一部分是这样的(为了简单起见,我只编写了产生错误的部分): 然后,当我想停止视频时,我只需通过以下函数将其从DOM中删除: StopMovieAudio = () => { console.log('clip', clip); console.log('clip.outerHTML', clip.outerHTML); clip.outerHTML = ""; } 问题是,有时我会遇到一个破坏整个

我有一个功能,只播放视频mp4文件的音频。。。函数的一部分是这样的(为了简单起见,我只编写了产生错误的部分):

然后,当我想停止视频时,我只需通过以下函数将其从DOM中删除:

StopMovieAudio = () => {
   console.log('clip', clip);
   console.log('clip.outerHTML', clip.outerHTML);
   clip.outerHTML = "";
} 
问题是,有时我会遇到一个破坏整个代码的错误:这是我的控制台:

正如您所看到的,错误的奇怪部分是当我可以记录
clip.outerHTML
并且它在下一行正确返回DOM时,我得到了意外错误:

未能在“元素”上设置“outerHTML”属性:此元素具有 没有父节点

我错过了什么?如何修复


编辑:伙计们,我注意到了更奇怪的事情。。。该剪辑未连接到主体中。。。即使我们可以记录
console.log('clip',clip)
并返回元素,在
控制台.log(document.body)
中没有这样的元素

我不建议使用非标准的浏览器扩展,如outerHTML,但如果您坚持,outerHTML不适用于任何从DOM分离出来的元素,这些元素没有父元素或HTML标记(应该是根)

我完全不知道这如何适用于您的情况,可能还有更多的代码没有显示

由于您正在寻求删除元素,因此使用W3C DOM API的
节点#remove

clip.remove();

您可以阅读更多信息。

可以尝试
document.body.removeChild(clip)
而不是
clip.outerHTML=“
尝试
clip.remove()
?顺便说一句,您的
video
clip
都引用同一个元素。“如果该元素没有父元素,设置其outerHTML属性将不会更改它或其子元素。许多浏览器也会抛出异常。”难道仅仅是函数StopMovieAudio被调用了两次(或更多)吗?它第一次从DOM中删除“clip”,第二次抛出错误,因为“clip”不再有父元素。请参见我接受您的答案,但问题是有关联的,我希望您能考虑一下并找到答案。。。我通过使用
StopMovieAudio
函数中的元素解决了这个问题,我的意思是使用
const clip=document.getElementById(“音频剪辑”)函数内部。。。我不知道函数外部的getById的
片段
怎么可能与函数内部的片段不同…?@SaraRee如果你一开始不确定,为什么还要这样做?如果有什么问题,只需检查自己:
console.log(video===clip)
但是如果您希望它们是相同的对象,只需重命名一个,然后删除
…getByID
。你不能把你根本没做的事情搞砸。另外,继续检查它们的
.parentElement
属性,
StopMovieAudio = () => {
   console.log('clip', clip);
   console.log('clip.outerHTML', clip.outerHTML);
   clip.outerHTML = "";
}