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ซึ่งแสดงวิธีการสร้าง bootstrap 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();เพื่อเปิดใช้งาน popover แต่ในสถานที่ของdata-toggle="popover"คุณยังสามารถใช้หรือid="my-popover" class="my-popover"เพียงจำไว้เพื่อให้พวกเขาใช้เช่น: $("#my-popover").popover();ในกรณีเหล่านั้น

นี่คือลิงค์ไปยังข้อมูลจำเพาะที่สมบูรณ์: Bootstrap Popover

โบนัส:

ถ้าด้วยเหตุผลบางอย่างคุณไม่ชอบหรือไม่สามารถอ่านเนื้อหาของป๊อปอัพจากdata-toggleและtitleแท็ก คุณสามารถใช้เช่น divs ที่ซ่อนอยู่และ JavaScript อีกเล็กน้อย นี่คือตัวอย่างเกี่ยวกับการที่


1
ลบ HREF href = "#" บนองค์ประกอบแท็ก ANCHOR เพื่อป้องกันการเลื่อนไปด้านบนของหน้า!
peter_pilgrim

@peter_pilgrim ขอบคุณที่พูดแบบนั้น ฉันอัปเดตคำตอบเพื่อใช้ bootstrap รุ่นล่าสุดและแก้ไข href = "#" จาก <a> แท็กและทำให้มันทำงานเหมือนปุ่มแทน (นี่เป็นเอกสารที่เว็บไซต์ bootstrap ด้วย) เพิ่มลิงค์นั้นไว้ท้ายคำตอบของฉัน
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

ไม่ทราบว่าทำไมคำตอบข้างต้นถูกทำเครื่องหมายว่าถูกต้อง บางทีคนจงใจเลือกตัวเลือกที่ซับซ้อนที่สุดเพื่อรักษางานของพวกเขา
stephen

ฉันมีป๊อปโอเวอร์นี้ที่ด้านล่างของหน้าของฉันและใช้งานได้ดีมากยกเว้น ... มันทำให้ฉันกลับไปที่ด้านบนสุดของหน้า ฉันได้ตั้งไว้ในวง foreach ของรูปขนาดย่อ bootstrap ความคิดใด ๆ
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
นี่มันเยี่ยมมาก @ แจ็คขอบคุณ ฉันชอบที่จะไม่ใส่ HTML ในคุณสมบัติ ยุ่งมาก
John Washam

ทำงานที่ยอดเยี่ยมที่นี่รักความเรียบง่ายและการใช้งานได้อย่างรวดเร็ว
FastTrack

MVP ตัวจริงของคุณ
plushyObject

ดูเหมือนจะไม่ทำงานกับ bootstrap 3.4.1 คุณช่วยได้ไหม @Jack stackoverflow.com/questions/60514533/…
2513846

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 คิดดี
Jimmy Ilenloa

Nice เคล็ดลับที่เกิดขึ้นจริงคือการเปลี่ยนเครื่องหมายคำพูดคู่เป็นคำพูดเดี่ยว!
Steven Barragán


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 เพื่อนำ popover กลับมาใช้ใหม่และใช้แอตทริบิวต์ bootstrap data ดั้งเดิมต่อไปเพื่อให้มีความหมายมากขึ้น:

ลิงค์

<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

คุณสามารถเปลี่ยน 'template / popover / popover.html' ในไฟล์ 'ui-bootstrap-tpls-0.11.0.js' เขียน: "bind-html-unsafe" แทน "ng-bind"

มันจะแสดง popover ทั้งหมดด้วย 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.