Twitter Bootstrapポップオーバー内のHTML


288

ブートストラップポップオーバー内にHTMLを表示しようとしていますが、どういうわけか機能しません。ここでいくつかの回答を見つけましたが、うまくいきません。私が何か間違ったことをしている場合はお知らせください。

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

回答:


351

<li href="#"それが属して<a href="#"いるので使用できません。それが機能しなかった理由です、それを変更して、それはすべて良いです。

これは、ブートストラップポップオーバーの作成方法を示すJSFiddleの動作です

コードの関連部分は以下のとおりです。

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();
});

ところで、少なくとも$("[data-toggle=popover]").popover();ポップオーバーを有効にする必要があります。ただし、代わりにまたはをdata-toggle="popover"使用することもできます。それらを有効にすることを忘れないでください。id="my-popover"class="my-popover"$("#my-popover").popover();

これが完全な仕様へのリンクです: Bootstrap Popover

ボーナス:

何らかの理由で、data-toggleおよびtitleタグからポップアップのコンテンツが気に入らないか、読み取れない場合。隠しdivなどのJavaScriptを使用することもできます。以下はそのです。


1
ANCHORタグ要素のHREF href = "#"を削除して、ページの上部にスクロールしないようにしてください。
peter_pilgrim

@peter_pilgrim言ってくれてありがとう。ブートストラップの最新バージョンを使用するように回答を更新し、<a>タグからhref = "#"を削除して、代わりにボタンのように動作するようにしました。(これもブートストラップサイトに記載されています)。私の回答の最後にそのリンクを追加しました。
MaunoVähä16年

iOSデバイスに問題が見つかりました。ポップオーバーはタッチスクリーンで機能します。一般的な回避策を見つけましたか?実際、これはBootstrapのポップオーバーコードでも発生すると思います。何か案は?
peter_pilgrim

285

属性を使用できます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>

gwtbootstrap3で使用する方法はありますか?この形式では機能しません。私はここでstackoverflow.com/questions/34142815/…の質問をしましたが、これまでのところ答えはありません。
ivan_bilan

上記の答えが正しいとマークされている理由がわかりません。多分人々は彼らの仕事を保存するために最も複雑なオプションを故意に選びます。
スティーブン

私は私のページの下部にこのポップオーバーを持っていて、以下を除いて素晴らしい働きをします...それは私をページの上部にずっと移動させます。ブートストラップサムネイルのforeachループで設定しました。何か案は?
foxtangocharlie 2017

106

再利用可能な方法でポップオーバーコンテンツを指定する別の方法は、次のように新しいデータ属性を作成してdata-popover-content使用することです。

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();
        }
    });
});

これは、ポップオーバーに配置するhtmlが多い場合に役立ちます。

以下はフィドルの例です:http : //jsfiddle.net/z824fn6b/


1
このモジュール式のアプローチは非常にエレガントです。多くのポップオーバーと1つの汎用JavaScript関数を使用できます。
xtian

1
@Jack、ありがとうございます。HTMLを属性に入れる必要がないのが大好きです。とても汚い。
John Washam、2015年

ここでの素晴らしい作業、シンプルさと使いやすさを愛する
FastTrack

あなたは本当のMVP
plushyObject 2018

ブートストラップ3.4.1で動作していないようですが、助けていただけますか?@Jack stackoverflow.com/questions/60514533/...
user2513846

84

htmlオプションを有効にしたpopoverインスタンスを作成する必要があります(これをjavascriptファイルのpopover JSコードの後に​​配置します)。

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


22

リスト内でポップオーバーを使用しました。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
HTMLコードをラップするために異なる引用符を使用することによる最も簡単なアプローチ。いい考え。
ジミーイレンロア2014年

いいですね、実際のトリックは二重引用符を単一引用符に変更することです!
StevenBarragán2015


6

これは、ジャックの優れた答えを少し変更したものです。

以下は、HTMLコンテンツのない単純なポップオーバーが影響を受けないようにするためのものです。

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

私は属性の中に長いHTMLを入れるのが本当に嫌いです、これが私の解決策です、明確でシンプルです(?をあなたが望むものに置き換えてください):

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

その後

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

4

これは古い質問ですが、これは別の方法です。jQueryを使用してポップオーバーを再利用し、元のブートストラップデータ属性を引き続き使用してセマンティックにします。

リンク

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

表示するカスタムコンテンツ

<!-- 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;
    }
});

完全な例のフィドル:http : //jsfiddle.net/tomsarduy/262w45L5/


2

ファイル「ui-bootstrap-tpls-0.11.0.js」の「template / popover / popover.html」を変更できます:「ng-bind」の代わりに「bind-html-unsafe」

すべてのポップオーバーがhtmlで表示されます。*安全でないhtml。htmlを信頼できる場合にのみ使用してください。


0

popoverイベントを使用して、属性 '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>


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.