Twitter 부트 스트랩 팝 오버 내의 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>

1
나는 동일한 질문에 대답했다 : 정규화 부트 스트랩
Olga

답변:


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>

자바 스크립트 :

$(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-toggleand 및 title태그 에서 팝업 내용을 좋아하지 않거나 읽을 수없는 경우 . 숨겨진 div 및 조금 더 JavaScript를 사용할 수도 있습니다. 여기에 대한 예가 있습니다.


1
페이지 상단으로 스크롤되지 않도록 ANCHOR 태그 요소에서 HREF href = "#"를 제거하십시오!
peter_pilgrim

@peter_pilgrim 고맙습니다. 최신 버전의 부트 스트랩을 사용하도록 답변을 업데이트하고 <a> 태그에서 href = "#"을 고정하고 대신 버튼처럼 작동하도록했습니다. (이것은 부트 스트랩 사이트에도 문서화되어 있습니다). 내 답변 끝에 링크를 추가했습니다.
Mauno Vähä

iOS 기기에서 문제를 발견했습니다. 팝 오버는 터치 스크린에서 작동합니다. 일반적인 해결 방법을 찾았습니까? 실제로, 이것이 부트 스트랩 팝 오버 코드에도 발생한다고 생각합니다. 어떤 아이디어?
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

위의 답변이 왜 정확한지 모르겠습니다. 아마도 사람들은 고의로 자신의 직업을 보존하기 위해 가장 복잡한 옵션을 선택할 수도 있습니다.
stephen

내 페이지 하단 에이 팝 오버가 있고 다음을 제외하고는 훌륭하게 작동합니다 ... 페이지 맨 위로 돌아갑니다. 부트 스트랩 축소판의 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
이 모듈 방식은 매우 우아합니다. 많은 팝 오버와 하나의 일반 자바 스크립트 함수를 가질 수 있습니다.
xtian

2
@Jack 감사합니다. HTML을 속성에 넣을 필요가 없습니다. 너무 지저분 해.
John Washam

여기에서 멋진 작업, 단순성과 유용성을 좋아합니다
FastTrack

당신은 진짜 MVP
plushyObject

부트 스트랩 3.4.1에서 작동하지 않는 것 같습니다. 제발 도와 줄 수 있습니까? @Jack stackoverflow.com/questions/60514533/…
user2513846

84

html 옵션이 활성화 된 팝 오버 인스턴스를 만들어야합니다 (팝 오버 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 코드를 래핑하기 위해 다른 따옴표를 사용하여 가장 간단한 방법입니다. 좋은 생각이야
Jimmy Ilenloa

실제 트릭은 큰 따옴표를 작은 따옴표로 변경하는 것입니다!
Steven Barragán


6

이것은 Jack의 탁월한 답변 에 약간의 수정입니다 .

다음은 HTML 컨텐츠가없는 간단한 팝 오버가 영향을받지 않도록합니다.

자바 스크립트 :

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

자바 스크립트

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