多个带有HTML内容的tippy.js工具提示

时间:2018-10-18 17:33:04

标签: javascript html

我正在尝试使用tippy.js在同一页面上获得具有不同HTML内容的多个工具提示。这些内容各不相同-它可能只是图像或使用HTML标签格式化的文本或文本+图像。我该如何工作?

我试图运行这段代码,但没有成功

 <a class="btn" href="#">Text</a>
<div class="myTemplate">
  <b>Text</b> <img src="https://i.imgur.com/dLcYjue.png">
</div>
 <a class="btn" href="#">Text2</a>
    <div class="myTemplate">
      <b>Text2</b>
    </div>


<script type="text/javascript">
    tippy('.btn', {
  content: document.querySelector('.myTemplate')
})
    const clone = document.querySelector('.myTemplate').cloneNode(true)
</script>

2 个答案:

答案 0 :(得分:2)

也许这可以帮助某人再次来到这里:

还要检查文档: https://atomiks.github.io/tippyjs/v6/html-content/

document.querySelectorAll('button[data-template]').forEach(btn => {
    tippy(btn, {
        content(reference) {
            const id = reference.getAttribute('data-template');
            const template = document.getElementById(id);
            return template.innerHTML;
        },
        allowHTML: true
    })
})
<script src="https://unpkg.com/@popperjs/core@2.0.6/dist/umd/popper.min.js"></script>
<script src="https://unpkg.com/tippy.js@6.0.0/dist/tippy-bundle.umd.min.js"></script>

<button data-template="one">One</button>
<button data-template="two">Two</button>
<button data-template="three">Three</button>

<div style="display: none;">
  <div id="one">
    <strong>Content for `one`</strong>
  </div>
  <div id="two">
    <strong>Content for `two`</strong>
  </div>
  <div id="three">
    <strong>Content for `three`</strong>
  </div>
</div>

答案 1 :(得分:0)

tippy将选择器作为其主要参数,您将需要不同的ID。如果在运行时生成了多个内容工具提示,建议在设置id并使用for循环对其进行迭代时使用通用约定。

考虑到有2个内容工具提示,

<a class="btn1" href="#">Text</a>
<div class="myTemplate1">
    <b>Text</b> <img src="https://i.imgur.com/dLcYjue.png">
</div>
<a class="btn2" href="#">Text2</a>
<div class="myTemplate2">
    <b>Text2</b>
</div>


<script type="text/javascript">
    tippy('.btn1', {
        content: document.querySelector('.myTemplate1')
    })
    tippy('.btn2', {
        content: document.querySelector('.myTemplate2')
    })
</script>