HTML всередині Twitter Bootstrap popover


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, який показує вам, як створити popover для завантаження.

Відповідні частини коду нижче:

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. Ви також можете використовувати, наприклад, приховані диви та трохи більше JavaScript. Ось приклад про це.


1
Видаліть HREF href = "#" з елементів тегу ANCHOR, щоб уникнути прокрутки до верхньої частини сторінки!
peter_pilgrim

@peter_pilgrim Дякую, що сказали це. Я оновив свою відповідь, щоб використовувати останню версію завантажувальної програми, і виправляв href = "#" з тегів <a> і змушував їх поводитися як кнопки. (Це також задокументовано на сайті завантаження). Додав це посилання до кінця моєї відповіді.
Mauno Vähä

Я знайшов проблему з пристроями iOS. Popover працює з сенсорним екраном. Ви знайшли загальну роботу навколо? Насправді, я думаю, що це трапляється і з кодом завантаження Bootstrap. Будь-які ідеї?
peter_pilgrim

286

Ви можете використовувати атрибут 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

107

Ще один спосіб визначити вміст переповненого способу для багаторазового використання - створити новий атрибут даних, як-от 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
Цей модульний підхід досить елегантний. Ви можете мати безліч переїздів і лише одну загальну функцію JavaScript.
xtian

2
Це чудово, @Jack, дякую. Мені подобається не вводити HTML в атрибути. Так безладно.
Джон Вашам

Чудова робота тут, любите простоту та зручність використання
FastTrack

Ви справжній MVP
plushyObject

Здається, це не працює з завантажувачем 3.4.1. Ви можете допомогти? @Jack stackoverflow.com/questions/60514533 / ...
user2513846

84

Вам потрібно створити екземпляр popover з увімкненою опцією html (розмістіть це у вашому файлі JavaScript після JS-коду popover):

$('.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-коду. Гарне мислення.
Джиммі Іленлоа

Приємно, власне трюк - це зміна подвійних лапок на одиничні лапки!
Стівен Барраган


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

Fiddle з повним прикладом: http://jsfiddle.net/tomsarduy/262w45L5/


2

Ви можете змінити 'template / popover / popover.html' у файлі 'ui-bootstrap-tpls-0.11.0.js' Write: "bind-html-unsafe" замість "ng-bind"

Він покаже все перепоювання з html. * його небезпечний html. Використовуйте лише якщо ви довіряєте html.


0

Ви можете використовувати подію Popover та керувати шириною за атрибутом 'width-data'

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.