bootstrap “tooltip” và “popover” thêm kích thước vào bảng


82

Lưu ý:
Tùy thuộc vào phiên bản Bootstrap của bạn (trước 3.3 hay không), bạn có thể cần một câu trả lời khác nhau.
Hãy chú ý đến các ghi chú.

Khi tôi kích hoạt chú giải công cụ (di chuột qua ô) hoặc cửa sổ bật lên trong mã này, kích thước của bảng sẽ tăng lên. Làm thế nào tôi có thể tránh điều này?

Ở đây voidRow - hàm tạo tr với 100

<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>

cảm ơn trong lời khuyên!


Bạn có nghĩa là kích thước chính xác bổ sung là gì? js tạo 100 ô trong một hàng dưới hàng trống được xác định trước. Tôi đã tạo một fiddle
Devellar

@Devellar, kích thước tăng trên kích hoạt tooltip (di chuột qua các tế bào)
mishka

@MikhaillErofeev Tôi cũng có cùng một vấn đề, Nếu bạn giải quyết nó xin vui lòng cho tôi biết
RNK Jangir

@RonakJangir, xem câu trả lời dưới đây
mishka

@MikhaillErofeev Tôi chỉ muốn thêm chú giải công cụ trên td, vì vậy câu trả lời này không hữu ích đối với tôi. Bởi giải pháp đã trình twitter bootstrap thấy github.com/twitter/bootstrap/issues/5980
RNK Jangir

Câu trả lời:


90

Lưu ý: Giải pháp cho Bootstrap 3.0 ~ 3.2

Bạn cần tạo một phần tử bên trong a tdvà áp dụng chú giải công cụ cho nó, như thế này , vì bản thân chú giải công cụ là một div và khi nó được đặt sautd phần tử, nó sẽ hãm bố cục bảng.

Sự cố này đã được đưa ra với bản phát hành mới nhất của Bootstrap. Có các cuộc thảo luận đang diễn ra về các bản sửa lỗi trên GitHub tại đây . Hy vọng rằng phiên bản tiếp theo bao gồm các tệp cố định.


57
Từ liên kết GitHub: Giải pháp cho v2.3.x là đặt tùy chọn vùng chứa của chú giải công cụ / cửa sổ bật lên thành nội dung. Ví dụ: $ (...). Tooltip ({container: 'body'}); Hoặc sử dụng thuộc tính data- * trong HTML: data-container = "body"
Domenic

5
@Domenic Đây phải là một câu trả lời và sau đó được đánh dấu là giải pháp đúng. Chỉ hoạt động.
Timm

1
xin vui lòng thêm này như là một câu trả lời, dễ dàng hơn cho các nhà phát triển trong tương lai
cmario

89

Lưu ý: Giải pháp cho Bootstrap 3.3+

Giải pháp đơn giản

Trong .tooltip()cuộc gọi, hãy đặt containertùy chọn thành body:

$(function () {
  $('[data-toggle="tooltip"]').tooltip({
    container : 'body'
  });
});

Ngoài ra, bạn có thể làm điều tương tự bằng cách sử dụng data-containerthuộc tính:

<p data-toggle="tooltip" data-placement="left" data-container="body" title="hi">some text</p>

Tại sao điều này hoạt động?

Điều này giải quyết được vấn đề vì theo mặc định, chú giải công cụ có display: blockvà phần tử được chèn vào nơi nó được gọi từ đó. Do display: blockđó, nó ảnh hưởng đến luồng trang trong một số trường hợp, tức là đẩy các phần tử khác xuống.

Bằng cách đặt vùng chứa thành phần tử body, chú giải công cụ sẽ được thêm vào phần thân thay vì nơi nó được gọi từ đó, vì vậy nó không ảnh hưởng đến các phần tử khác vì không có gì để "đẩy xuống".


3
Cảm ơn! Hoạt động hoàn hảo.
Amy Patterson

Cảm ơn!! Tùy chọn data-toggle = "tooltip" hoạt động nhưng không hoạt động với tùy chọn vùng chứa: 'body' ..
R. Mo

Cảm ơn rất nhiều, điều này lưu giờ tôi :)
Viky293

1
Điều này không hoạt động nếu bảng của bạn ở trong một phương thức, vì chú giải công cụ xuất hiện ở đâu đó trong trang (có thể tôi vẫn chưa tìm thấy nó). Emptor caveat. Tuy nhiên, câu trả lời được chấp nhận vẫn hoạt động, chỉ cần bọc nội dung td của bạn trong một div và áp dụng chú giải công cụ vào đó.
Hippyjim

17

Lưu ý: Giải pháp cho Bootstrap 3.3+

Nếu bạn muốn tránh làm vỡ bảng khi áp dụng chú giải công cụ cho một <td>phần tử, bạn có thể sử dụng mã sau:

    $(function () {
        $("body").tooltip({
            selector: '[data-toggle="tooltip"]',
            container: 'body'
        });
    })

Html của bạn có thể trông như thế này:

<td data-toggle="tooltip" title="Your tooltip data">
    Table Cell Content
</td>

Điều này thậm chí hoạt động với nội dung được tải động. Ví dụ trong sử dụng với datatables


1
Cảm ơn bạn! Cuối cùng thì tôi cũng có thể sử dụng chú giải công cụ với các dữ liệu
sebasira

9

Tôi muốn thêm một số độ chính xác vào câu trả lời được chấp nhận, tôi quyết định sử dụng định dạng câu trả lời để dễ đọc.

Lưu ý: Giải pháp cho Bootstrap 3.0 ~ 3.2

Ngay bây giờ, gói chú giải công cụ của bạn trong một div là giải pháp , nhưng nó sẽ cần một số sửa đổi nếu bạn muốn toàn bộ <td>chú giải công cụ của mình hiển thị chú giải công cụ (vì Bootstrap CSS). Một cách đơn giản để làm điều đó là chuyển <td>padding của nó sang 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'
    });
});

nếu bạn muốn toàn bộ <td> để hiển thị tooltip, chỉ áp dụng tooltip trực tiếp đến các yếu tố td
shock_gone_wild

@shock_gone_wild Đó không phải là vấn đề. Áp dụng chú giải công cụ cho bất kỳ <td>phần tử nào sẽ phá vỡ toàn bộ bảng, như đã nêu trong câu hỏi ban đầu và mọi câu trả lời. Đó là lý do tại sao tất cả chúng tôi đã chọn thêm một phần tử khác bên trong nó. Điều đó nói rằng, tôi không biết về tính năng mới của Bootstrap 4 và lỗi này có thể đã được sửa.
zessx

không nó sẽ không phá vỡ bảng nếu bạn thêm vùng chứa: 'body'. Xem câu trả lời của tôi tại đây. stackoverflow.com/a/34882401/3927116
shock_gone_wild

1
Các containerđã được giới thiệu vào năm 2014, 2 năm sau khi câu hỏi này. Cảm ơn bạn đã nhận xét, tôi sẽ thực hiện một số chỉnh sửa để làm sáng tỏ tùy chọn này và chính xác rằng lỗi này không liên quan đến các phiên bản Bootstrap mới nhất.
zessx

1
tôi vừa thêm câu này, vì câu trả lời được tán thành cao đã sử dụng tùy chọn vùng chứa. Và đối với độc giả trong tương lai, thông tin này có thể rất hữu ích;)
shock_gone_wild

1

Bạn nên khởi tạo Chú giải công cụ bên trong hàm dữ liệu fnDrawCallback

"fnDrawCallback": function (data, type, full, meta) { $('[data-toggle="tooltip"]').tooltip({ placement: 'right', title: 'heyo', container: 'body', html: true }); },

Và xác định cột của bạn như bên dưới

 {
      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>";
    }
 },

Ủng hộ cho phần fnDrawCallback và là nơi duy nhất khởi tạo chú giải công cụ BS với định dạng HTML hoạt động với một dữ liệu đã bật phân trang.
Drew

1

Nếu bạn đang sử dụng dữ liệu cho bảng thì nó sẽ được sử dụng đầy đủ

$('#TableId').DataTable({
                "drawCallback": function (settings) {
                    debugger;
                    $('[data-toggle="tooltip"]').tooltip({
                        container: 'body'
                    });

                }
            });

0

Nếu bạn đang sử dụng chỉ thị bootstrap cho AngularJS, hãy sử dụng thuộc tính tooltip-append-to-body.

<td ng-repeat="column in row.columns" uib-tooltip="{{ ctrl.viewModel.leanings.tooltip }}" tooltip-append-to-body="true"></td>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.