回答:
今日、ソースコードを読んでいるときにこれを見つけました。したがって$.tooltip(string)
、Tooltip
クラス内の任意の関数を呼び出します。そして、を見るとTooltip.fixTitle
、data-original-title
属性をフェッチして、タイトル値をそれで置き換えます。
したがって、単に次のようにします。
$(element).tooltip('hide')
.attr('data-original-title', newValue)
.tooltip('fixTitle')
.tooltip('show');
そして、もちろん、タイトルを更新します。これは、ツールチップ内の値です。
別の方法(下記の@lukmdoコメントを参照):
$(element).attr('title', 'NEW_TITLE')
.tooltip('fixTitle')
.tooltip('show');
$(element).attr('title', 'NEW_TITLE').tooltip('fixTitle').tooltip('show');
$(element).attr('data-original-title', newValue).tooltip('show');
私にとって最もシンプルな作業ソリューションでした。
Bootstrap 3ではelt.attr('data-original-title', "Foo")
、"data-original-title"
属性の変更が既にツールチップ表示の変更をトリガーしているので、これで十分です。
更新:変更をすぐに表示する.tooltip( 'show')を追加できます。タイトルの変更を確認するためにマウスアウトおよびマウスオーバーターゲットを行う必要はありません。
elt.attr('data-original-title', "Foo").tooltip('show');
.tooltip('show');
、更新後に表示するために追加できます
ツールチップを閉じて再度開かずにテキストを変更したい場合は、ここに良い解決策があります。
$(element).attr('title', newTitle)
.tooltip('fixTitle')
.data('bs.tooltip')
.$tip.find('.tooltip-inner')
.text(newTitle)
この方法では、ツールチップを閉じずにテキストが置き換えられます(再配置は行われませんが、1つの単語の変更などを行っている場合は問題ありません)。また、ツールチップをオフにして+戻ると、引き続き更新されます。
**これはブートストラップ3です。2の場合、おそらくデータ/クラス名を変更する必要があります
$tip
はの属性ではありません$(element)
$(element).attr('title', newTitle).tooltip('fixTitle').parent().find('.tooltip .tooltip-inner').text(newTitle);
これは、ツールチップが(おそらくJavaScriptで)インスタンス化されている場合に機能します。
$("#tooltip_id").data('tooltip').options.title="New_value!";
$("#tooltip_id").tooltip('hide').tooltip('show');
$('#tooltip_id').data('bs.tooltip').options.title = 'New_value!';
これがBootstrap 4のアップデートです。
var title = "Foo";
elt.attr('data-original-title', title);
elt.tooltip('update');
elt.tooltip('show');
しかし、最善の方法は次のようにすることです:
var title = "Foo";
elt.attr('title', title);
elt.attr('data-original-title', title);
elt.tooltip('update');
elt.tooltip('show');
またはインライン:
var title = "Foo";
elt.attr('title', title).attr('data-original-title', title).tooltip('update').tooltip('show');
UX側から見ると、フェードや非表示/表示効果なしでテキストが変更され、の必要がないことがわかります_fixTitle
。
$('#topic_1').tooltip('dispose').tooltip({title: 'Goodbye'}).tooltip('show')
https://getbootstrap.com/docs/4.1/components/tooltips/#tooltipdispose
$('#topic_1').tooltip({title: 'Hello'}).tooltip('show');
setTimeout( function() {
$('#topic_1').tooltip('dispose').tooltip({title: 'Goodbye'}).tooltip('show');
}, 5000);
#topic_1 {
border: 1px solid red;
margin: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js" integrity="sha384-o+RDsa0aLu++PJvFqy8fFScvbHFLtbvScb8AjopnFD+iEQ7wo/CG0xlczd+2O/em" crossorigin="anonymous"></script>
<div id="topic_1">Topic 1</div>
以下は私にとって最もうまくいきました、基本的に私は既存のツールチップを破棄し、新しいツールチップを表示する気になりません。他の回答のようにツールチップでshowを呼び出すと、カーソルがその上に移動していなくてもポップアップ表示されます。
このソリューションを採用した理由は、既存のツールチップを再利用する他のソリューションが原因で、要素の上にカーソルを置いたときにツールチップが表示されないという奇妙な問題が発生したためです。
function updateTooltip(element, tooltip) {
if (element.data('tooltip') != null) {
element.tooltip('hide');
element.removeData('tooltip');
}
element.tooltip({
title: tooltip
});
}
data('bs.tooltip')
代わりに使用する必要がありますdata('tooltip')
ブートストラップ4では$(el).tooltip('dispose');
、通常どおりに使用して再作成します。したがって、ツールチップを作成する関数の前にdisposeを配置して、2倍にならないようにすることができます。
状態をチェックし、値をいじくり回す必要があることは、あまりフレンドリーではないようです。
関数を使用してツールチップの呼び出しにコンテンツを設定できます
$("#myelement").tooltip({
"title": function() {
return "<h2>"+$("#tooltipcontainer").html()+"</h2>";
}
});
呼び出された要素のタイトルのみを使用する必要はありません。
Mehmet Duranはほぼ正しいと思いますが、同じツールチップとその配置で複数のクラスを使用するときにいくつかの問題がありました。次のコードは、「tooltip_class」というクラスがあるかどうかのjsエラーチェックも回避します。お役に立てれば。
if (jQuery(".tooltip_class")[0]){
jQuery('.tooltip_class')
.attr('title', 'New Title.')
.attr('data-placement', 'right')
.tooltip('fixTitle')
.tooltip('hide');
}
要素内のテキストを直接変更して、テキストを変更します。(ツールチップの位置は更新されません)。
$('.tooltip-inner', $element.next()).html(newHtml);
$('.tooltip-inner', $element.next()).text(newText);
古いツールチップを破棄してテキストを変更し、新しいツールチップを作成して表示します。(古いものはフェードアウトし、新しいものはフェードインします)
$element
.tooltip('destroy')
.tooltip({
// Repeat previous options.
title: newText,
})
.tooltip('show');
topメソッドを使用して、両方の「節約」をアニメーション化しています。メッセージ( 
ツールチップのサイズが変更されないようにするため)を使用して、テキストを「完了」に変更します。(およびパディング)リクエストが完了したとき。
$element.tooltip({
placement: 'left',
title: 'Saving...',
trigger: 'manual',
}).tooltip('show');
var parent = $element.parent();
var interval_id = setInterval(function(){
var text = $('.tooltip-inner', parent).html();
switch(text) {
case 'Saving. ': text = 'Saving.. '; break;
case 'Saving.. ': text = 'Saving...'; break;
case 'Saving...': text = 'Saving. '; break;
}
$('.tooltip-inner', parent).html(text);
}, 250);
send_request( function(){
// When the request is complete
clearInterval(interval_id);
$('.tooltip-inner', parent).html('Done. ');
setTimeout(function() {
$element.tooltip('hide');
}, 1500 /* Show "Done." for a bit */);
});
これは私のために働きました:(bootstrap 3.3.6; jquery = 1.11.3)
<a id="alertTooltip" href="#" data-html="true" class="tooltip" data-toggle="tooltip" title="Tooltip message"></a>
<script>
$('#alertTooltip').attr('title', "Tooltip new <br /> message").tooltip('fixTitle');
</script>
属性data-html="true"
は、ツールチップのタイトルにhtmlを使用することを許可します。
BS4(およびマイナーな変更を加えたBS3)の場合..何時間もの検索と試行の結果、この問題に対する最も信頼できる解決策が思い付き、同時に複数の(ツールチップまたはポップオーバー)を開くという問題も解決しました。フォーカスを失った後に自動的に開く問題など
$('[data-toggle="tooltip"]').tooltip({
trigger: 'hover'
}).on('shown.bs.tooltip', function() {
var link = $(this);
var data = '';
data += '<ul style="list-style-type:none;margin:0;padding:0;text-align:left;font-size:12px">';
data += ' <li>Sherif Salah</li>';
data += ' <li>Muhammad Salah</li>';
data += ' <li>and a gazillion more...</li>';
data += '</ul>';
link.attr('data-original-title', data);
setTimeout(function() {
if (link.is(':hover')) {
link.tooltip("dispose").tooltip("show");
}
}, 1000);
});
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<div class="card">
<div class="card-body text-center">
<a href="JavaScript:void(0);" class="btn btn-sm btn-link" data-toggle="tooltip" data-placement="top" data-html="true" title="Loading...">gazillion</a>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</body>
</html>