注:
Bootstrapバージョン(3.3以前かどうか)によっては、別の回答が必要になる場合があります。
メモに注意してください。
このコードでツールチップ(セルの上にカーソルを合わせる)またはポップオーバーをアクティブにすると、テーブルのサイズが大きくなります。どうすればこれを回避できますか?
ここでemptyRow-100でtrを生成する関数
<html>
<head>
<title></title>
<script type="text/javascript" language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://Twitter.github.com/bootstrap/assets/css/bootstrap.css">
<script type="text/javascript" language="javascript" src="http://cdnjs.cloudflare.com/ajax/libs/Twitter-bootstrap/2.2.1/bootstrap.min.js"></script>
<style>
#matrix td {
width: 10px;
height: 10px;
border: 1px solid gray;
padding: 0px;
}
</style>
<script>
function emptyRow() {
str = '<tr>'
for (j = 0; j < 100; j++) {
str += '<td rel="tooltip" data-original-title="text"></td>'
}
str += '</tr>'
return str
}
$(document).ready(function () {
$("#matrix tr:last").after(emptyRow())
$("[rel=tooltip]").tooltip();
});
</script>
</head>
<body style="margin-top: 40px;">
<table id="matrix">
<tr>
</tr>
</table>
</body>
</html>
アドバイスありがとうございます!
注:Bootstrap 3.0〜3.2のソリューション
ツールチップ自体はdivであり、td
の後に配置されるため、td
内に要素を作成し、 this などのツールチップを適用する必要があります。要素は、テーブルレイアウトにブレーキをかけます。
この問題は、Bootstrapの最新リリースで導入されました。 GitHub here の修正について継続的に議論されています。次のバージョンに修正ファイルが含まれることを願っています。
注:Bootstrap 3.3+のソリューション
.tooltip()
呼び出しで、container
オプションをbody
に設定します。
$(function () {
$('[data-toggle="tooltip"]').tooltip({
container : 'body'
});
});
または、data-container
属性を使用して同じことを実行できます。
<p data-toggle="tooltip" data-placement="left" data-container="body" title="hi">some text</p>
これにより、デフォルトでツールチップにdisplay: block
があり、呼び出し元の場所に要素が挿入されるため、問題が解決します。 display: block
により、場合によってはページフローに影響します。つまり、他の要素を押し下げます。
コンテナをbody要素に設定することにより、ツールチップは呼び出し元ではなく本文に追加されるため、「プッシュダウン」するものがないため、他の要素には影響しません。
注:Bootstrap 3.3+のソリューション
<td>
要素にツールチップを適用するときにテーブルが壊れないようにするには、次のコードを使用できます。
$(function () {
$("body").tooltip({
selector: '[data-toggle="tooltip"]',
container: 'body'
});
})
Htmlは次のようになります。
<td data-toggle="tooltip" title="Your tooltip data">
Table Cell Content
</td>
これは、動的にロードされたコンテンツでも機能します。たとえば、 datatables で使用する場合
受け入れられた回答に精度を追加したいので、読みやすさのために回答形式を使用することにしました。
注:Bootstrap 3.0〜3.2のソリューション
現時点では、 divでツールチップをラップすることがソリューションです ですが、<td>
全体をツールチップを表示する場合は、いくつかの変更が必要です(Bootstrapのため) CSS)。簡単な方法は、<td>
のパディングをwrapperに転送することです:
HTML
<table class="table table-hover table-bordered table-striped">
<tr>
<td>
<div class="show-tooltip" title="Tooltip content">Cell content</div>
</td>
</tr>
</table>
JS(jQuery)
$('.show-tooltip').each(function(e) {
var p = $(this).parent();
if(p.is('td')) {
/* if your tooltip is on a <td>, transfer <td>'s padding to wrapper */
$(this).css('padding', p.css('padding'));
p.css('padding', '0 0');
}
$(this).tooltip({
toggle: 'toolip',
placement: 'bottom'
});
});
テーブルにデータテーブルを使用している場合、完全に使用されます
$('#TableId').DataTable({
"drawCallback": function (settings) {
debugger;
$('[data-toggle="tooltip"]').tooltip({
container: 'body'
});
}
});
AngularJSにbootstrapディレクティブを使用している場合は、tooltip-append-to-body属性を使用します。
<td ng-repeat="column in row.columns" uib-tooltip="{{ ctrl.viewModel.leanings.tooltip }}" tooltip-append-to-body="true"></td>
初期化する必要がありますTooltip datatable関数内fnDrawCallback
"fnDrawCallback": function (data, type, full, meta) { $('[data-toggle="tooltip"]').tooltip({ placement: 'right', title: 'heyo', container: 'body', html: true }); },
以下のように列を定義します
{
targets: 2,
'render': function (data, type, full, meta) {
var htmlBuilder = "<b>" + data + "</b><hr/><p>Description: <br/>" + full["longDescrioption"] + "</p>";
return "<a href='#' class='Name'>" + (data.length > 50 ? data.substr(0, 50) + '…' : data) + "</a>" +
"<sup data-toggle='tooltip' data-original-title=" + htmlBuilder + ">"+
"<i class='ic-open-in-new ic' style='font-size:12px;margintop:-3px;'></i></sup>";
}
},