HTML di dalam popover Bootstrap Twitter


288

Saya mencoba untuk menampilkan HTML di dalam popover bootstrap, tetapi entah bagaimana itu tidak berfungsi. Saya menemukan beberapa jawaban di sini tetapi tidak akan berhasil untuk saya. Tolong beri tahu saya jika saya melakukan sesuatu yang salah.

<script>
  $(function(){
    $('[rel=popover]').popover({ 
      html : true, 
      content: function() {
        return $('#popover_content_wrapper').html();
      }
    });
  });
</script>

<li href="#" id="example" rel="popover" data-content="" data-original-title="A Title"> 
    popover
</li>

<div id="popover_content_wrapper" style="display: none">
    <div>This is your div content</div>
</div>

Jawaban:


351

Anda tidak dapat menggunakan <li href="#"karena itu milik <a href="#"mengapa itu tidak bekerja, mengubahnya dan itu semua baik.

Inilah JSFiddle yang berfungsi yang menunjukkan cara membuat bootstrap popover.

Bagian yang relevan dari kode di bawah ini:

HTML:

<!-- 
Note: Popover content is read from "data-content" and "title" tags.
-->
<a tabindex="0"
   class="btn btn-lg btn-primary" 
   role="button" 
   data-html="true" 
   data-toggle="popover" 
   data-trigger="focus" 
   title="<b>Example popover</b> - title" 
   data-content="<div><b>Example popover</b> - content</div>">Example popover</a>

JavaScript:

$(function(){
    // Enables popover
    $("[data-toggle=popover]").popover();
});

Omong-omong, Anda selalu membutuhkan setidaknya $("[data-toggle=popover]").popover();untuk mengaktifkan popover. Tapi di tempat data-toggle="popover"Anda juga bisa menggunakan id="my-popover"atau class="my-popover". Ingatlah untuk mengaktifkannya menggunakan mis: $("#my-popover").popover();dalam kasus tersebut.

Berikut ini tautan ke spesifikasi lengkap: Bootstrap Popover

Bonus:

Jika karena alasan tertentu Anda tidak suka atau tidak bisa membaca konten sembulan dari tag data-toggledan title. Anda juga dapat menggunakan mis. Div tersembunyi dan sedikit lebih JavaScript. Berikut ini contohnya .


1
Hapus HREF href = "#" pada elemen tag ANCHOR untuk mencegah pengguliran ke bagian atas halaman!
peter_pilgrim

@peter_pilgrim Terima kasih telah mengatakan itu. Saya memperbarui jawaban saya untuk menggunakan versi terbaru dari bootstrap dan memperbaiki href = "#" dari <a> tag dan membuatnya berperilaku seperti tombol. (Ini juga didokumentasikan di situs bootstrap). Menambahkan tautan itu ke akhir jawaban saya.
Mauno Vähä

Saya menemukan masalah dengan perangkat iOS. Popover tidak berfungsi dengan layar sentuh. Sudahkah Anda menemukan pekerjaan umum? Sebenarnya, saya pikir ini juga terjadi pada kode popover Bootstrap juga. Ada ide?
peter_pilgrim

285

Anda dapat menggunakan atribut data-html="true":

<a href="#" id="example"  rel="popover" 
    data-content="<div>This <b>is</b> your div content</div>" 
    data-html="true" data-original-title="A Title">popover</a>

Apakah ada cara untuk menggunakannya di gwtbootstrap3, tidak berfungsi dalam formulir ini. Saya telah mengajukan pertanyaan di sini stackoverflow.com/questions/34142815/… , tapi sejauh ini tidak ada jawaban.
ivan_bilan

Tidak tahu mengapa jawaban di atas ditandai sebagai benar. Mungkin orang dengan sengaja memilih opsi yang paling rumit untuk mempertahankan pekerjaan mereka.
stephen

Saya memiliki popover ini di bagian bawah halaman saya dan berfungsi dengan baik kecuali ... Ini menggeser saya kembali ke atas halaman. Saya telah mengaturnya dalam loop foreach thumbnail bootstrap. Ada ide?
foxtangocharlie

106

Cara lain untuk menentukan konten popover dengan cara yang dapat digunakan kembali adalah dengan membuat atribut data baru seperti data-popover-contentdan menggunakannya seperti ini:

HTML:

<!-- Popover #1 -->
<a class="btn btn-primary" data-placement="top" data-popover-content="#a1" data-toggle="popover" data-trigger="focus" href="#" tabindex="0">Popover Example</a>

<!-- Content for Popover #1 -->
<div class="hidden" id="a1">
  <div class="popover-heading">
    This is the heading for #1
  </div>

  <div class="popover-body">
    This is the body for #1
  </div>
</div>

JS:

$(function(){
    $("[data-toggle=popover]").popover({
        html : true,
        content: function() {
          var content = $(this).attr("data-popover-content");
          return $(content).children(".popover-body").html();
        },
        title: function() {
          var title = $(this).attr("data-popover-content");
          return $(title).children(".popover-heading").html();
        }
    });
});

Ini dapat bermanfaat ketika Anda memiliki banyak html untuk ditempatkan di popovers Anda.

Berikut adalah contoh biola: http://jsfiddle.net/z824fn6b/


1
Pendekatan modular ini cukup elegan. Anda dapat memiliki banyak popover dan hanya satu fungsi javascript generik.
xtian

1
Ini bagus, @Jack, terima kasih. Saya suka tidak harus memasukkan HTML ke atribut. Sangat berantakan.
John Washam

Kerja luar biasa di sini, suka kesederhanaan dan kegunaan
FastTrack

Anda MVP asli
plushyObject

Tampaknya tidak berfungsi dengan bootstrap 3.4.1, dapatkah Anda membantu? @Jack stackoverflow.com/questions/60514533/…
user2513846

84

Anda perlu membuat instance popover yang mengaktifkan opsi html (tempatkan ini di file javascript Anda setelah kode JS popover):

$('.popover-with-html').popover({ html : true });


22

Saya menggunakan pop di dalam daftar, saya memberi contoh melalui HTML

<a type="button" data-container="body" data-toggle="popover" data-html="true" data-placement="right" data-content='<ul class="nav"><li><a href="#">hola</li><li><a href="#">hola2</li></ul>'>

1
pendekatan paling sederhana dengan menggunakan kutipan berbeda untuk membungkus kode html. Pemikiran yang bagus.
Jimmy Ilenloa

Bagus, trik sebenarnya adalah mengubah tanda kutip ganda menjadi tanda kutip tunggal!
Steven Barragán

8

Anda hanya perlu memasukkan data-html="true"tautan popover. Apakah akan berhasil?


6

Ini sedikit modifikasi pada jawaban Jack yang luar biasa .

Berikut ini memastikan popover sederhana, tanpa konten HTML, tetap tidak terpengaruh.

JavaScript:

$(function(){
    $('[data-toggle=popover]:not([data-popover-content])').popover();
    $('[data-toggle=popover][data-popover-content]').popover({
        html : true,
        content: function() {
          var content = $(this).attr("data-popover-content");
          return $(content).children(".popover-body").html();
        },
        title: function() {
          var title = $(this).attr("data-popover-content");
          return $(title).children(".popover-heading").html();
        }
    });
});

4

Saya benar-benar benci untuk meletakkan HTML yang panjang di dalam atribut, ini solusinya, jelas dan sederhana (ganti? Dengan apa pun yang Anda inginkan):

<a class="btn-lg popover-dismiss" data-placement="bottom" data-toggle="popover" title="Help">
    <h2>Some title</h2>
    Some text
</a>

kemudian

var help = $('.popover-dismiss');
help.attr('data-content', help.html()).text(' ? ').popover({trigger: 'hover', html: true});

4

Ini adalah pertanyaan lama, tetapi ini adalah cara lain, menggunakan jQuery untuk menggunakan kembali popover dan tetap menggunakan atribut data bootstrap asli untuk membuatnya lebih semantik:

Tautannya

<a href="#" rel="popover" data-trigger="focus" data-popover-content="#popover">
   Show it!
</a>

Konten khusus untuk ditampilkan

<!-- Let's show the Bootstrap nav on the popover-->
<div id="list-popover" class="hide">
    <ul class="nav nav-pills nav-stacked">
        <li><a href="#">Action</a></li>
        <li><a href="#">Another action</a></li>
        <li><a href="#">Something else here</a></li>
        <li><a href="#">Separated link</a></li>
    </ul>
</div>

Javascript

$('[rel="popover"]').popover({
    container: 'body',
    html: true,
    content: function () {
        var clone = $($(this).data('popover-content')).clone(true).removeClass('hide');
        return clone;
    }
});

Fiddle dengan contoh lengkap: http://jsfiddle.net/tomsarduy/262w45L5/


2

Anda dapat mengubah 'template / popover / popover.html' di file 'ui-bootstrap-tpls-0.11.0.js' Tulis: "bind-html-tidak aman" alih-alih "ng-bind"

Ini akan menampilkan semua popover dengan html. * html tidak aman. Gunakan hanya jika Anda mempercayai html.


0

Anda dapat menggunakan acara sembulan, dan mengontrol lebar dengan atribut 'data-width'

$('[data-toggle="popover-huongdan"]').popover({ html: true });
$('[data-toggle="popover-huongdan"]').on("shown.bs.popover", function () {
    var width = $(this).attr("data-width") == undefined ? 276 : parseInt($(this).attr("data-width"));
    $("div[id^=popover]").css("max-width", width);
});
 <a class="position-absolute" href="javascript:void(0);" data-toggle="popover-huongdan" data-trigger="hover" data-width="500" title="title-popover" data-content="html-content-code">
 <i class="far fa-question-circle"></i>
 </a>


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.