javascript 我可以在Twitter Bootstrap的工具提示中使用复杂的HTML吗?

pb3s4cty  于 2023-05-15  发布在  Java
关注(0)|答案(8)|浏览(117)

如果我查看官方文档,我可以看到一个名为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插入工具提示”,但类型是布尔型。如何在工具提示中使用复杂的html?

o0lyfsai

o0lyfsai1#

这个参数只是关于你是否要在工具提示中使用复杂的html。将其设置为true,然后将html输入标记的title属性。
看看这个小把戏here-我已经通过<a>标签中的data-html="true"将html属性设置为true,然后作为一个例子添加到html ad hoc中。

c2e8gylq

c2e8gylq2#

另一个避免将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

mepcadol

mepcadol3#

使用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代码没有被转义,用户可以自己编辑简历,他们可能会注入恶意代码。

odopli94

odopli944#

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演示:

nle07wnf

nle07wnf5#

设置“html”选项为true如果你想有html到工具提示.实际的html是由选项“title”决定的(不应该设置链接的title属性)

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

Live sample

s4chpxco

s4chpxco6#

从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!
     })
});
b09cbbtk

b09cbbtk7#

对于bootstrap 5,您可以将data-bs-html="true"与标题标记data-bs-original-title="Tooltip Title"一起使用

nr7wwzry

nr7wwzry8#

在文本中包含转义字符的工具提示中存在相同的问题,通过在启用工具提示之前为文本内容和转义字符使用自定义属性来解决此问题:

JSP/HTML中

<a id="myTooltip" href="#"
    class="country-list-trigger" data-toggle="tooltip" data-alternative-title="Text with "escaped characters" ==> this should be displayed ==>  "as it is""
    data-html="true" title=""> 
        <i class="fa fa-info-circle fa-2"></i>
</a>

Javascript语言

$(document).ready(function() {
    enableAllTooltips();
} );

// enable tooltip after getting the title from the custom attribute (does not work when using the default attribute: data-original-title)
function enableAllTooltips() {
  $('[data-toggle="tooltip"]').tooltip({
      template: '<div class="tooltip tooltip-custom"><div class="arrow"></div><div class="tooltip-inner"></div></div>',
      title: function() {
        return escapeHtml(this.getAttribute('data-alternative-title'));
      }
  })
}

// Custom method for replacing escaped characters by there character entities 
function escapeHtml(unsafe) {
    return unsafe
         .replace(/&/g, "&amp;")
         .replace(/</g, "&lt;")
         .replace(/>/g, "&gt;")
         .replace(/"/g, "&quot;")
         .replace(/'/g, "&#039;");
}

相关问题