Bootstrap 5 将工具提示标题更新为 Javascript

Bootstrap 5 update Tooltip Title with Javascript

在 Bootstrap 4 中,我使用以下示例代码来更新工具提示的标题(其中 'statusIcon' 是元素,在本例中是一个很棒的字体图标,但同样的原则适用对于按钮或其他任何东西:

$(statusIcon).attr('data-original-title', 'Check Error logs for details').tooltip();

Razor 页面 html 元素:

<i class="fas fa-circle fa-lg" id="statusIcon:@item.Id" data-bs-toggle="tooltip" data-bs-placement="right" title="Started" data-bs-animation="false" style="font-size: 1.5em; color: #28A745"></i>

阅读 Bootrap 5 的手册,他们似乎没有告诉我们如何使用 Vanilla JS 实现此目的

到目前为止我在 Javascript 中尝试过的内容:

var statusIconId = 'statusIcon:' + pluginId + '';
var statusIcon = document.getElementById(statusIconId);    
document.getElementById(statusIconId).setAttribute("data-bs-original-title", 'Check Error logs for details');

我在元素 ID 中使用变量,因为我在 Razor 列表视图中使用元素。

您可以通过更改 data-bs-original-title 属性来更新工具提示标题

$(function () {

  // Init
  $('[data-toggle="tooltip"]').tooltip()
  
  // Update jquery
  // $('#tt').attr('data-bs-original-title', 'New Tooltip Title');
  
  // Update js
  document.getElementById('tt').setAttribute('data-bs-original-title', 'New Tooltip Title');
})
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<button type="button" id='tt' class="btn btn-secondary" data-toggle="tooltip" data-placement="bottom" title="Tooltip title">
  Tooltip
</button>

由于Bootstrap5.0不再需要jQuery,使用document.querySelector(),然后修改元素后重新初始化tooltip:

// initialize
const tooltipElement = document.querySelector('[data-bs-toggle="tooltip"]')
let bsTooltip = new bootstrap.Tooltip(tooltipElement)

// update
tooltipElement.title = 'New Title'
bsTooltip = new bootstrap.Tooltip(tooltipElement)
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css" integrity="sha512-HK5fgLBL+xu6dm/Ii3z4xhlSUyZgTT9tuc/hSrtw6uzJOvgRr2a9jyxxT1ely+B+xFAmJKVSTbpM/CuL7qxO8w==" crossorigin="anonymous" />
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js"></script>

<i class="fas fa-circle fa-lg" id="statusIcon:@item.Id" data-bs-toggle="tooltip" data-bs-placement="right" title="Started" data-bs-animation="false" style="font-size: 1.5em; color: #28A745"></i>

(已更新以使用您的 Razor 页面元素)

这是一个示例,如果您的工具提示处于循环状态,并且您想更新单击按钮的工具提示。

用例:

使用 clipboard.js

在 table 行中复制按钮

代码:

index.blade.php

<button type="button" data-bs-toggle="tooltip" data-bs-placement="top" title="Copy to clipboard" class="btn-clip btn btn-primary" data-clipboard-text="{{ user.domain }}">Copy</button>

index.js

let clipboard = new ClipboardJS('.btn-clip');
 
clipboard.on('success', function (e) {
    let trigger_button = e.trigger;

    // update the tooltip title, get the tooltip instance, and show it
 
    trigger_button.setAttribute('data-bs-original-title', 'Copied!');
 
    let btn_tooltip = bootstrap.Tooltip.getInstance(trigger_button);
 
    btn_tooltip.show();

    // reset the tooltip title
 
    trigger_button.setAttribute('data-bs-original-title', 'Copy to clipboard');
    
});

我必须执行以下操作才能使其与 Bootstrap 5 和 ClipboardJS 2 一起使用:

<script src="js/clipboard.js"></script>
<script src="js/jquery-3.6.0.js"></script>
<script src="js/bootstrap.bundle.js"></script>

<script>
$(document).ready(function () {

  // Tooltip

  $('[data-bs-toggle="tooltip"]').tooltip()

  // Clipboard

  const clipboard = new ClipboardJS('.btn-clipboard')

  clipboard.on('success', function(e) {

    $('.tooltip-inner').html('Copied!')
    $(e.trigger).tooltip('update')

    e.clearSelection()
  })

  clipboard.on('error', function (e) {
    var fallbackMsg = /Mac/i.test(navigator.userAgent) ? 'Press \u2318 to copy' : 'Press Ctrl-C to copy'

    $('.tooltip-inner').html(fallbackMsg)
    $(e.trigger).tooltip('update')
  })
})
</script>


<button type="button" class="btn btn-clipboard" data-clipboard-text="copied text" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Click/touch to copy">Button</button>

唯一对我有用的是处理工具提示并使用 setTimeout 和 'enable' 重新构建它,而不是 'show' 重复悬停..

$('#shareLink').on('click', function (e) {
  
  $('#shareLink').tooltip('dispose').attr('title', 'Link copied!');
  $('#shareLink').tooltip('show');

  setTimeout( function () {
    $('#shareLink').tooltip('dispose').attr('title', 'Copy link to Clipboard');
    $('#shareLink').tooltip('enable');
  }, 2000);

});