【问题标题】:Can I use complex HTML with Twitter Bootstrap's Tooltip?我可以在 Twitter Bootstrap 的工具提示中使用复杂的 HTML 吗?
【发布时间】:2012-11-22 04:33:52
【问题描述】:

如果我检查official documentation,我可以看到一个名为 HTML 的属性:

Name    |    Type       |    default  |    Description
----------------------------------------------------------------------------
html    |    boolean    |    false    |    Insert html into the tooltip. 
                                           If false, jquery's text method 
                                           will be used to insert content 
                                           into the dom. Use text if you're 
                                           worried about XSS attacks.

上面写着“将 html 插入工具提示”,但类型是布尔值。如何在 Tooltip 中使用复杂的 html?

【问题讨论】:

    标签: javascript html twitter-bootstrap-3 tooltip


    【解决方案1】:

    这个参数只是关于你是否要在工具提示中使用复杂的html。将其设置为true,然后将html打到标签的title属性中。

    查看这个小提琴here - 我通过<a> 标记中的data-html="true" 将html 属性设置为true,然后作为示例添加到html ad hoc 中。

    【讨论】:

    • 嗯,他们的文档在那个领域不是很清楚。感谢分享这个答案! :)
    • 引导文档是出了名的垃圾:) 很高兴我能把事情弄清楚!
    • 小提琴示例对我不起作用。我仍然看到原始的 HTML 代码。
    • 可能像您怀疑的那样对引导代码进行了一些更改。在我在函数属性中使用 {html: true} 为 html 标题连接所有工具提示之前,但从 2.2.2 > 2.3.1 开始,我必须将 data-html="true" 添加到我的元素中并废弃{html: true} 部分。我真的希望他们能在第一次尝试时更频繁地把事情做好,而不是在发布之间不断地造成重大变化。
    • 见这里:jsfiddle.net/44khF/148。此外,它似乎只适用于 data 属性而不使用 html: 如果使用委托,则在初始化中为 true。
    【解决方案2】:

    和平常一样,使用data-original-title:

    HTML:

    <div rel='tooltip' data-original-title='<h1>big tooltip</h1>'>Visible text</div>
    

    Javascript:

    $("[rel=tooltip]").tooltip({html:true});
    

    html 参数指定工具提示文本应如何转换为 DOM 元素。默认情况下,Html 代码在工具提示中转义以防止 XSS 攻击。假设您在您的网站上显示了一个用户名,并在工具提示中显示了一个小简历。如果 html 代码没有被转义,并且用户可以自己编辑 bio,他们可能会注入恶意代码。

    【讨论】:

    • data-original-title 是引导程序临时存储title(如果存在)的位置。如果您没有标题,data-title 就足够了,例如 &lt;a href="#" title="xxx"&gt;
    • 很好很简单
    • 你好@MattZeunert 我已经使用它并且运行得非常好,但我想根据我即将到来的数据更新标题而不重新加载页面并动态设置,我的意思是更改标题内的内容。跨度>
    【解决方案3】:

    如果您想将 html 放入工具提示中,请将“html”选项设置为 true。实际 html 由选项“title”确定(不应设置链接的 title 属性)

    $('#example1').tooltip({placement: 'bottom', title: '<p class="testtooltip">par</p>', html: true});
    

    Live sample

    【讨论】:

      【解决方案4】:

      html 数据属性与文档中所说的完全一样。试试这个小例子,不需要 JavaScript(为了澄清而分成几行):

      <span rel="tooltip" 
           data-toggle="tooltip" 
           data-html="true" 
           data-title="<table><tr><td style='color:red;'>complex</td><td>HTML</td></tr></table>"
      >
      hover over me to see HTML
      </span>
      


      JSFiddle 演示:

      【讨论】:

        【解决方案5】:

        另一种避免将html插入data-title的解决方案是创建带有工具提示html内容的独立div,并在创建工具提示时参考这个div:

        <!-- Tooltip link -->
        <p><span class="tip" data-tip="my-tip">Hello world</span></p>
        
        <!-- Tooltip content -->
        <div id="my-tip" class="tip-content hidden">
            <h2>Tip title</h2>
            <p>This is my tip content</p>
        </div>
        
        <script type="text/javascript">
            $(document).ready(function () {
                // Tooltips
                $('.tip').each(function () {
                    $(this).tooltip(
                    {
                        html: true,
                        title: $('#' + $(this).data('tip')).html()
                    });
                });
            });
        </script>
        

        通过这种方式,您可以创建复杂的可读 html 内容,并根据需要激活尽可能多的工具提示。

        现场演示here on codepen

        【讨论】:

        • 太棒了。我很高兴有人提出了一种不会将 HTML 直接塞入数据属性的解决方案。
        • 在 Bootstrap 4.5 中运行良好。奇怪的是,这在任何地方都没有记录。
        【解决方案6】:

        从 bootstrap 5 开始,您可以在配置时将工具提示的内容指定为 html DOM 节点。示例配置...

        // setup tools tips trigger
        const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
        const tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
             return new Tooltip(tooltipTriggerEl, {
                   html: true // <- this should do the trick!
             })
        });
        

        【讨论】:

        • 我很想用这个方法,但是我完全不明白你在说什么。你能提供示例 HTML 吗?
        猜你喜欢
        • 2012-05-13
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-19
        相关资源
        最近更新 更多