Bootstrap 4.3.1 Popover 不显示内部 Popover 内容 Table
Bootstrap 4.3.1 Popover Does Not Display Table Inside Popover Content
我有一个 Bootstrap 4.3.1 弹出窗口,内容中嵌入了 Table。显示所有内容,但 table 未显示。在下面的代码中,我尝试了 content
的功能以及直接 $('#a02').html()
.
的功能
$("[data-toggle=popover]").popover({
html: true,
content: function() { return $('#a02').html(); }, // Also tried directly without function
title: 'Test'
}).click(function() {
$(this).popover('show');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<a href="#" data-toggle="popover" data-trigger="focus" data-placement="right">
Click Here for Popover
</a>
<div id="a02" style="display: none;">
Some text before table
<div>
<table width="100%">
<thead>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</tbody>
</table>
</div>
</div>
有些人曾尝试向我展示可与 Bootstrap 3 一起使用的 JSFiddle。我使用了他们的 JSFiddle,只是将 Bootstrap refs 更改为 4,然后它就坏了。
Bootstrap 3 JSFiddle | Bootstrap 4 JSFiddle
你可以这样做:
$(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();
}
});
});
<!-- Popover #1 -->
<a href="#" class="btn btn-primary" tabindex="0" data-toggle="popover" data-trigger="focus" data-popover-content="#a1" data-placement="right">Popover Example</a>
<!-- Content for Popover #1 -->
<div id="a1" class="hidden">
<div class="popover-heading">Title</div>
<div class="popover-body">
<table style="width:100%">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>
</div>
</div>
Link to Popover Bootstrap 4.0 Documentation
更新:
Updated JSFiddle
对于某些 table 无法在弹出框内工作的方法,但您可以使用其他标签,例如 ul
。我刚刚用 ul
更新了我希望它能帮助你。谢谢
$("[data-toggle=popover]").popover({
html: true,
content: function() { return $('#a02').html(); }, // Also tried directly without function
title: 'Test',
}).click(function() {
$(this).popover('show');
});
.popover-html ul {
list-style: none;
margin: 0;
padding: 0;
}
.popover-html ul li {
display: inline-block;
white-space: nowrap;
width: 33%;
}
.popover-html ul li + li {
padding-left: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<a href="#" data-toggle="popover" data-trigger="focus" data-placement="right">
Click Here for Popover
</a>
<div id="a02" style="display: none;">
Some text before table <div class='popover-html'><ul><li>Column 1</li><li>Column 2</li><li>Column 3</li></ul><ul><li>1</li><li>2</li><li>3</li></ul></div>
您可以在 data-content 属性中添加 HTML 的另一个选项。谢谢
$("[data-toggle=popover]").popover();
.popover-html ul {
list-style: none;
margin: 0;
padding: 0;
}
.popover-html ul li {
display: inline-block;
white-space: nowrap;
width: 33%;
}
.popover-html ul li + li {
padding-left: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<a tabindex="0"
class="btn btn-lg btn-primary"
role="button"
data-html="true"
data-toggle="popover"
data-trigger="focus"
title="Test"
data-content="Some text before table<div class='popover-html'><ul><li>Column 1</li><li>Column 2</li><li>Column 3</li></ul><ul><li>1</li><li>2</li><li>3</li></ul></div>">Click Here for Popover</a>
工具提示和弹出窗口使用内置清理器清理接受 HTML
的选项
https://getbootstrap.com/docs/4.3/getting-started/javascript/#sanitizer
试试这个:
$(function() {
$.fn.popover.Constructor.Default.whiteList.table = [];
$.fn.popover.Constructor.Default.whiteList.tr = [];
$.fn.popover.Constructor.Default.whiteList.td = [];
$.fn.popover.Constructor.Default.whiteList.th = [];
$.fn.popover.Constructor.Default.whiteList.div = [];
$.fn.popover.Constructor.Default.whiteList.tbody = [];
$.fn.popover.Constructor.Default.whiteList.thead = [];
$("[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();
}
});
});
biri 的回答没有任何问题,但正如您所知(因为它的记录也很糟糕),如果您愿意,可以停用整个消毒剂。
$(function() {
$("[data-toggle=popover]").popover({
sanitize: false,
});
});
更新:你知道什么? It's documented 现在:
+----------+---------+---------+----------------------------------------+
| Name | Type | Default | Description |
+----------+---------+---------+----------------------------------------+
| sanitize | boolean | true | Enable or disable the sanitization. If |
| | | | activated 'template', 'content' and |
| | | | 'title' options will be sanitized. |
+----------+---------+---------+----------------------------------------+
<div class=".." data-bs-toggle="popover" data-bs-trigger="hover" data-bs-html="true" data-bs-animation="false" data-bs-placement="top" data-bs-content=".." title=".."></div>
添加 data-bs-animation="false" 解决了我的问题。
我有一个 Bootstrap 4.3.1 弹出窗口,内容中嵌入了 Table。显示所有内容,但 table 未显示。在下面的代码中,我尝试了 content
的功能以及直接 $('#a02').html()
.
$("[data-toggle=popover]").popover({
html: true,
content: function() { return $('#a02').html(); }, // Also tried directly without function
title: 'Test'
}).click(function() {
$(this).popover('show');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<a href="#" data-toggle="popover" data-trigger="focus" data-placement="right">
Click Here for Popover
</a>
<div id="a02" style="display: none;">
Some text before table
<div>
<table width="100%">
<thead>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</tbody>
</table>
</div>
</div>
有些人曾尝试向我展示可与 Bootstrap 3 一起使用的 JSFiddle。我使用了他们的 JSFiddle,只是将 Bootstrap refs 更改为 4,然后它就坏了。 Bootstrap 3 JSFiddle | Bootstrap 4 JSFiddle
你可以这样做:
$(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();
}
});
});
<!-- Popover #1 -->
<a href="#" class="btn btn-primary" tabindex="0" data-toggle="popover" data-trigger="focus" data-popover-content="#a1" data-placement="right">Popover Example</a>
<!-- Content for Popover #1 -->
<div id="a1" class="hidden">
<div class="popover-heading">Title</div>
<div class="popover-body">
<table style="width:100%">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>
</div>
</div>
Link to Popover Bootstrap 4.0 Documentation 更新: Updated JSFiddle
对于某些 table 无法在弹出框内工作的方法,但您可以使用其他标签,例如 ul
。我刚刚用 ul
更新了我希望它能帮助你。谢谢
$("[data-toggle=popover]").popover({
html: true,
content: function() { return $('#a02').html(); }, // Also tried directly without function
title: 'Test',
}).click(function() {
$(this).popover('show');
});
.popover-html ul {
list-style: none;
margin: 0;
padding: 0;
}
.popover-html ul li {
display: inline-block;
white-space: nowrap;
width: 33%;
}
.popover-html ul li + li {
padding-left: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<a href="#" data-toggle="popover" data-trigger="focus" data-placement="right">
Click Here for Popover
</a>
<div id="a02" style="display: none;">
Some text before table <div class='popover-html'><ul><li>Column 1</li><li>Column 2</li><li>Column 3</li></ul><ul><li>1</li><li>2</li><li>3</li></ul></div>
您可以在 data-content 属性中添加 HTML 的另一个选项。谢谢
$("[data-toggle=popover]").popover();
.popover-html ul {
list-style: none;
margin: 0;
padding: 0;
}
.popover-html ul li {
display: inline-block;
white-space: nowrap;
width: 33%;
}
.popover-html ul li + li {
padding-left: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<a tabindex="0"
class="btn btn-lg btn-primary"
role="button"
data-html="true"
data-toggle="popover"
data-trigger="focus"
title="Test"
data-content="Some text before table<div class='popover-html'><ul><li>Column 1</li><li>Column 2</li><li>Column 3</li></ul><ul><li>1</li><li>2</li><li>3</li></ul></div>">Click Here for Popover</a>
工具提示和弹出窗口使用内置清理器清理接受 HTML
的选项https://getbootstrap.com/docs/4.3/getting-started/javascript/#sanitizer
试试这个:
$(function() {
$.fn.popover.Constructor.Default.whiteList.table = [];
$.fn.popover.Constructor.Default.whiteList.tr = [];
$.fn.popover.Constructor.Default.whiteList.td = [];
$.fn.popover.Constructor.Default.whiteList.th = [];
$.fn.popover.Constructor.Default.whiteList.div = [];
$.fn.popover.Constructor.Default.whiteList.tbody = [];
$.fn.popover.Constructor.Default.whiteList.thead = [];
$("[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();
}
});
});
biri 的回答没有任何问题,但正如您所知(因为它的记录也很糟糕),如果您愿意,可以停用整个消毒剂。
$(function() {
$("[data-toggle=popover]").popover({
sanitize: false,
});
});
更新:你知道什么? It's documented 现在:
+----------+---------+---------+----------------------------------------+
| Name | Type | Default | Description |
+----------+---------+---------+----------------------------------------+
| sanitize | boolean | true | Enable or disable the sanitization. If |
| | | | activated 'template', 'content' and |
| | | | 'title' options will be sanitized. |
+----------+---------+---------+----------------------------------------+
<div class=".." data-bs-toggle="popover" data-bs-trigger="hover" data-bs-html="true" data-bs-animation="false" data-bs-placement="top" data-bs-content=".." title=".."></div>
添加 data-bs-animation="false" 解决了我的问题。