如何在Twitter的Popover中使用“div”和多个按钮?

时间:2012-07-05 16:59:56

标签: javascript jquery html twitter-bootstrap popover

此解决方案适用于一个按钮案例:Is it possible to use a div as content for Twitter's Popover

但是在我的页面中,我有一堆弹出窗口(例如50-100) 所以我需要修改这个解决方案。

这是wa @jävi的解决方案:

$(document).ready(function(){
  $('.danger').popover({ 
    html : true,
    content: function() {
      return $('#popover_content_wrapper').html();
    }
  });
});

我的每个按钮都有自己的ID。

<a class='danger' data-placement='above' title="Popover Title" href='#'>Click</a>
<div id="popover_div1" style="display: none">
  <div>This is your div content</div>
</div>

<a class='danger' data-placement='above' title="Popover Title" href='#'>Click</a>
<div id="popover_div2" style="display: none">
  <div>This is your div content</div>
</div>

那么如何重写这个javascript代码片段来覆盖我的所有按钮呢?

5 个答案:

答案 0 :(得分:13)

我自己就是为此奋斗。您需要将id放在触发弹出窗口的元素中。使用像这样的自定义数据属性(称为“data-id”):

<a class='danger' data-id="popover_div1" data-placement='above' title="Popover Title" href='#'>Click</a>

然后,您可以稍微修改您的javascript以编程方式获取data-id属性值:

$(document).ready(function(){
  $('.danger').popover({ 
    html : true,
    content: function() {
      return $($(this).attr('data-id')).html();
    }
  });
});

答案 1 :(得分:4)

如果您不想使用其他data-*属性污染源元素,则可以使用data-content属性作为文本或CSS选择器的简单通用方法:

$('[data-toggle="popover"]').popover({
    html: true,
    content: function() {
        var content = $(this).data('content');
        try { content = $(content).html() } catch(e) {/* Ignore */}
        return content;
    }
});

您现在可以将data-content属性与文本值一起使用:

<a data-toggle="popover" data-title="Popover Title" data-content="Text from data-content attribute!" class="btn btn-large" href="#">Click to toggle popover</a>

...或使用带有CSS选择器值的data-content属性:

<a data-toggle="popover" data-title="Popover Title" data-content="#countdown-popup" class="btn btn-large" href="#">Click to toggle popover</a>

<div id="countdown-popup" class="hide">Text from <code>#countdown-popup</code> element!</div>

您可以在此处测试此解决方案:http://jsfiddle.net/almeidap/eX2qd/

...或者在这里,如果您使用的是Bootstrap 3.0:http://jsfiddle.net/almeidap/UvEQd/(请注意data-content-target属性名称!)

答案 2 :(得分:1)

您可以在没有其他按钮属性的情况下执行此操作:

http://jsfiddle.net/isherwood/E5Ly5/

.popper-content {
    display: none;
}

<button class="popper" data-toggle="popover">Pop me</button>
<div class="popper-content">My first popover content goes here.</div>

<button class="popper" data-toggle="popover">Pop me</button>
<div class="popper-content">My second popover content goes here.</div>

<button class="popper" data-toggle="popover">Pop me</button>
<div class="popper-content">My third popover content goes here.</div>

$('.popper').popover({
    container: 'body',
    html: true,
    content: function () {
        return $(this).next('.pop-content').html();
    }
});

答案 3 :(得分:0)

将包含popover html的div的id存储在a元素的rel属性中

<a rel="popover_div2" ... >click</a>

然后在你的点击监听器中获取click锚点的rel(不确定popover方法如何存储它,但我确信它确实如此):

var myRel = $(this).attr(rel);
return $(myRel).html();

答案 4 :(得分:0)

对我而言,它确实是

data-id="#popover_div1" 

在按钮的HTML中(用#表示div的id)。