HTML im Twitter Bootstrap Popover


288

Ich versuche, HTML in einem Bootstrap-Popover anzuzeigen, aber irgendwie funktioniert es nicht. Ich habe hier einige Antworten gefunden, aber es wird bei mir nicht funktionieren. Bitte lassen Sie mich wissen, wenn ich etwas falsch mache.

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

Antworten:


351

Sie können es nicht verwenden, <li href="#"da es dazu gehört. <a href="#"Deshalb hat es nicht funktioniert. Ändern Sie es und es ist alles gut.

Hier arbeitet JSFiddle, das Ihnen zeigt, wie Sie ein Bootstrap-Popover erstellen.

Relevante Teile des Codes sind unten:

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();Übrigens müssen Sie immer mindestens das Popover aktivieren. Aber anstelle von können data-toggle="popover"Sie auch id="my-popover"oder verwenden class="my-popover". Denken Sie daran, sie zu aktivieren, indem Sie z. B.: $("#my-popover").popover();In diesen Fällen verwenden.

Hier ist der Link zur vollständigen Spezifikation: Bootstrap Popover

Bonus:

Wenn Sie aus irgendeinem Grund den Inhalt eines Popups aus den Tags data-toggleund nicht mögen oder nicht lesen können title. Sie können auch zB versteckte Divs und etwas mehr JavaScript verwenden. Hier ist ein Beispiel dafür .


1
Entfernen Sie HREF href = "#" auf den ANCHOR-Tag-Elementen, um zu verhindern, dass Sie zum Anfang der Seite scrollen!
— Peter_pilgrim

@peter_pilgrim Danke, dass du das gesagt hast. Ich habe meine Antwort aktualisiert, um die neueste Version von Bootstrap zu verwenden, und href = "#" von <a> -Tags entfernt und sie stattdessen wie Schaltflächen verhalten lassen. (Dies ist auch auf der Bootstrap-Site dokumentiert). Dieser Link wurde am Ende meiner Antwort hinzugefügt.
— Mauno Vähä

Ich habe ein Problem mit iOS-Geräten gefunden. Das Popover funktioniert mit dem Touchscreen. Haben Sie eine allgemeine Lösung gefunden? Eigentlich denke ich, dass dies auch mit Bootstrap-Popover-Code passiert. Irgendwelche Ideen?
— Peter_pilgrim

285

Sie können Attribut verwenden 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>

Gibt es eine Möglichkeit, es in gwtbootstrap3 zu verwenden, funktioniert es in dieser Form nicht. Ich habe die Frage hier gestapelt stackoverflow.com/questions/34142815/… , aber bisher keine Antwort.
— ivan_bilan

Ich weiß nicht, warum die obige Antwort als richtig markiert ist. Vielleicht wählen die Leute absichtlich die komplizierteste Option, um ihre Arbeitsplätze zu erhalten.
— Stephen

Ich habe dieses Popover am Ende meiner Seite und es funktioniert hervorragend, außer ... Es verschiebt mich ganz zurück zum Anfang der Seite. Ich habe es in einer foreach-Schleife von Bootstrap-Thumbnails gesetzt. Irgendwelche Ideen?
— Foxtangocharlie

106

Eine andere Möglichkeit, den Popover-Inhalt wiederverwendbar anzugeben, besteht darin, ein neues Datenattribut wie folgt zu erstellen data-popover-contentund wie folgt zu verwenden:

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

Dies kann nützlich sein, wenn Sie viel HTML in Ihre Popover einfügen müssen.

Hier ist ein Beispiel für eine Geige: http://jsfiddle.net/z824fn6b/


1
Dieser modulare Ansatz ist sehr elegant. Sie können viele Popovers und nur eine generische Javascript-Funktion haben.
— Xtian

1
Das ist großartig, @Jack, danke. Ich liebe es, HTML nicht in Attribute einfügen zu müssen. So unordentlich.
— John Washam

Tolle Arbeit hier, liebe die Einfachheit und Benutzerfreundlichkeit
— FastTrack

Sie das echte MVP
— plushyObject

Es scheint nicht mit Bootstrap 3.4.1 zu funktionieren. Können Sie bitte helfen? @Jack stackoverflow.com/questions/60514533/…
— user2513846

84

Sie müssen eine Popover-Instanz erstellen, für die die HTML-Option aktiviert ist (fügen Sie diese nach dem Popover-JS-Code in Ihre Javascript-Datei ein):

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


22

Ich habe ein Pop-Over in einer Liste verwendet. Ich gebe ein Beispiel über 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
einfachster Ansatz durch Verwendung verschiedener Anführungszeichen zum Umschließen des HTML-Codes. Nettes Denken.
— Jimmy Ilenloa

Schön, der eigentliche Trick besteht darin, die doppelten Anführungszeichen in einfache Anführungszeichen zu ändern!
— Steven Barragán


6

Dies ist eine leichte Modifikation von Jacks ausgezeichneter Antwort .

Im Folgenden wird sichergestellt, dass einfache Popovers ohne HTML-Inhalt nicht betroffen sind.

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

Ich hasse es wirklich, langen HTML-Code in das Attribut einzufügen. Hier ist meine Lösung, klar und einfach (ersetzen? Durch was auch immer Sie wollen):

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

dann

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

4

Dies ist eine alte Frage, aber dies ist eine andere Möglichkeit, jQuery zu verwenden, um das Popover wiederzuverwenden und weiterhin die ursprünglichen Bootstrap-Datenattribute zu verwenden, um es semantischer zu gestalten:

Der Link

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

Benutzerdefinierter Inhalt zum Anzeigen

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

Geige mit vollständigem Beispiel: http://jsfiddle.net/tomsarduy/262w45L5/


2

Sie können die 'template / popover / popover.html' in der Datei 'ui-bootstrap-tpls-0.11.0.js' ändern. Schreiben Sie: "bind-html-unsafe" anstelle von "ng-bind".

Es wird alles Popover mit HTML angezeigt. * Es ist unsicher HTML. Nur verwenden, wenn Sie dem HTML-Code vertrauen.


0

Sie können das Popover-Ereignis verwenden und die Breite über das Attribut 'Datenbreite' steuern.

$('[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>


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.