J'utilise le popover bootstrap de Twitter ici . Pour le moment, lorsque je fais défiler le texte survolé, il apparaît avec le texte de l'attribut <a>
's data-content
. Je me demandais s'il y avait quand même une façon de mettre un <div>
à l'intérieur du popover. Potentiellement, je voudrais utiliser php et mysql, mais si je pouvais obtenir une div au travail, je pense pouvoir comprendre le reste. J'ai essayé de définir le contenu des données sur un ID div
, mais cela n'a pas fonctionné.
HTML:
<a class='danger'
data-placement='above'
rel='popover'
data-content='#PopupDiv'
href='#'>Click</a>
Tout d'abord, si vous souhaitez utiliser HTML dans le contenu, vous devez définir l'option HTML sur true:
$('.danger').popover({ html : true});
Ensuite, vous avez deux options pour définir le contenu d'un Popover
tilisation de data-content: Vous devez échapper le contenu HTML, quelque chose comme ceci:
<a class='danger' data-placement='above'
data-content="<div>This is your div content</div>"
title="Title" href='#'>Click</a>
Vous pouvez soit échapper manuellement le code HTML, soit utiliser une fonction. Je ne connais pas PHP, mais dans Rails, nous utilisons * html_safe *.
tilisation d'une fonction JS: Si vous faites cela, vous avez plusieurs options. Le plus simple est de mettre votre contenu div caché où vous voulez, puis d'écrire une fonction pour transmettre son contenu à popover. Quelque chose comme ça:
$(document).ready(function(){
$('.danger').popover({
html : true,
content: function() {
return $('#popover_content_wrapper').html();
}
});
});
Et puis votre HTML ressemble à ceci:
<a class='danger' data-placement='above' title="Popover Title" href='#'>Click</a>
<div id="popover_content_wrapper" style="display: none">
<div>This is your div content</div>
</div>
J'espère que ça aide!
PS: J'ai eu quelques problèmes lors de l'utilisation de popover et de la non définition de l'attribut title ... souvenez-vous de toujours définir le titre.
En s'appuyant sur la réponse de jävi, cela peut être fait sans identifiants ni attributs de bouton supplémentaires, comme ceci:
http://jsfiddle.net/isherwood/E5Ly5/
<button class="popper" data-toggle="popover">Pop me</button>
<div class="popper-content hide">My first popover content goes here.</div>
<button class="popper" data-toggle="popover">Pop me</button>
<div class="popper-content hide">My second popover content goes here.</div>
<button class="popper" data-toggle="popover">Pop me</button>
<div class="popper-content hide">My third popover content goes here.</div>
$('.popper').popover({
container: 'body',
html: true,
content: function () {
return $(this).next('.popper-content').html();
}
});
Une autre méthode si vous souhaitez simplement avoir l’aspect de pop-over. Voici la méthode. Bien sûr, ceci est une chose manuelle, mais joliment exploitable :)
HTML - bouton
<button class="btn btn-info btn-small" style="margin-right:5px;" id="bg" data-placement='bottom' rel="tooltip" title="Background Image"><i class="icon-picture icon-white"></i></button>
HTML - popover
<div class="bgform popover fade bottom in">
<div class="arrow"></div>
..... your code here .......
</div>
JS
$("#bg").click(function(){
$('.bgform').slideToggle();
});
En retard à la fête. Construire les autres solutions. J'avais besoin d'un moyen de passer le DIV cible en tant que variable. Voici ce que j'ai fait.
HTML pour la source Popover (ajout d'un attribut de données data-pop qui contiendra la valeur pour la classe DIV id/ou destination):
<div data-html="true" data-toggle="popover" data-pop="popper-content" class="popper">
HTML pour le contenu Popover (j'utilise bootstrap masquer la classe):
<div id="popper-content" class="hide">Content goes here</div>
Scénario:
$('.popper').popover({
placement: popover_placement,
container: 'div.page-content',
html: true,
trigger: 'hover',
content: function () {
var pop_dest = $(this).attr("data-pop");
//console.log(plant);
return $("#"+pop_dest).html();
}});
En plus d'autres réponses. Si vous autorisez html
dans les options, vous pouvez passer l'objet jQuery
au contenu. Ce dernier sera ajouté au contenu de Popover avec tous les événements et les liaisons. Voici la logique du code source:
html
n'est pas autorisé, les données de contenu seront appliquées sous forme de textehtml
autorisé et que les données de contenu sont sous forme de chaîne, elles seront appliquées sous la forme html
$("#popover-button").popover({
content: $("#popover-content"),
html: true,
title: "Popover title"
});
Toutes ces réponses manquent un aspect très important!
En utilisant .html ou innerHtml ou outerHtml, vous n'utilisez pas réellement l'élément référencé. Vous utilisez une copie du code HTML de l'élément. Cela a de sérieux inconvénients.
Ce que vous voulez faire, c'est charger l'objet lui-même dans le popover.
https://jsfiddle.net/shrewmouse/ex6tuzm2/4/
HTML:
<h1> Test </h1>
<div><button id="target">click me</button></div>
<!-- This will be the contents of our popover -->
<div class='_content' id='blah'>
<h1>Extra Stuff</h1>
<input type='number' placeholder='number'/>
</div>
JQuery:
$(document).ready(function() {
// We don't want to see the popover contents until the user clicks the target.
// If you don't hide 'blah' first it will be visible outside of the popover.
//
$('#blah').hide();
// Initialize our popover
//
$('#target').popover({
content: $('#blah'), // set the content to be the 'blah' div
placement: 'bottom',
html: true
});
// The popover contents will not be set until the popover is shown. Since we don't
// want to see the popover when the page loads, we will show it then hide it.
//
$('#target').popover('show');
$('#target').popover('hide');
// Now that the popover's content is the 'blah' dive we can make it visisble again.
//
$('#blah').show();
});
Pourquoi si compliqué? il suffit de mettre ceci:
data-html='true'