当通过 innerHTML 添加 html 内容时,弹出框未显示

Posted

技术标签:

【中文标题】当通过 innerHTML 添加 html 内容时,弹出框未显示【英文标题】:Popover not showing when the html content got added through innerHTML 【发布时间】:2020-04-23 15:08:13 【问题描述】:

这件事让我很困扰,如果有人能帮助我,我将不胜感激。

我想从已经存在的弹出框中取出 innerhtml 并将其放入另一个 div 中。当我这样做时,另一个 div 内的弹出框不起作用。

这是我的头:

<link
  rel="stylesheet"
  href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
  integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
  crossorigin="anonymous"
/>

<script
  src="https://code.jquery.com/jquery-3.4.1.slim.min.js"
  integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"
  crossorigin="anonymous"
></script>

<script
  src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
  integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
  crossorigin="anonymous"
></script>

<script
  src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
  integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
  crossorigin="anonymous"
></script>

主体:

<div id="myPopover" class="com">
  <a
    class="arrow"
    tabindex="0"
    role="button"
    data-toggle="popover"
    data-trigger="hover"
    title="Title"
    data-content="Content"
    ><img src="https://i.imgur.com/BQpNMZA.jpg"
  /></a>
</div>

<button onclick="myFunction()">Click here</button>

<div id="demo">hej</div>

脚本:

$(function() 
  $('[data-toggle="popover"]').popover();
);

function myFunction() 
  document.getElementById('demo').innerHTML = document.getElementById(
    'myPopover'
  ).innerHTML;

当我按下按钮时,id 为“demo”的 div 应该从 id 为“myPopover”的 div 中获取 innerHTML。当我在 Firefox 中打开检查器时,这似乎有效,问题是没有显示弹出框。

【问题讨论】:

如果删除复制innerHTML的代码,弹出框会发生什么? @Pengson 什么都没有。显示第一个弹出框。但是后面添加的popover(innerHTML)没有显示 当然,它可以正常工作。 $('[data-toggle="popover"]').popover();仅触发执行时确实存在的弹出框。那时按钮还没有被压,第二个popover也不存在。 【参考方案1】:

您需要将此行添加到myFunction()

$('[data-toggle="popover"]').popover();

因为您要将内部 html 从 myPopover div 添加到 DOM,所以您需要在新创建的元素上初始化弹出框。否则 Popover 不会知道。

【讨论】:

以上是关于当通过 innerHTML 添加 html 内容时,弹出框未显示的主要内容,如果未能解决你的问题,请参考以下文章

Mutation Observer 不检测通过innerHTML、appendChild 添加的节点

添加到 innerHTML 而不破坏表单内容

innerHTML 剥离动态添加的字符

从 InnerHTML 中的代码隐藏向页面添加 ASP 控件

javascript中innerHTML 获取或替换html内容

让用户定义innerHTML的漏洞