jQuery不能改变bootstrap'的数据位置


jQuery cannot change bootstrap's data-placement

我发现了一个bug。jQuery似乎不能在HTML渲染后改变它的弹出窗口的数据位置。

的例子:

   $('[data-toggle=popover],[rel=popover]').popover();
 <? if (isset($labels) && $labels): ?>
  <div id="<?= $id ?>" class="product-labels leak-image-click">
    <? foreach($labels as $label): ?>
      <a class="product-label cursor-pointer" data-label="<?= $label ?>" tabindex="0" data-toggle="popover"  role="button" data-trigger="focus" <?= $label == "soldout" ? "data-soldout-target='".$soldout."'" : "" ?>>
      </a>
    <? endforeach ?>
  </div>
<? endif ?>
labels.init = function(id) {
  $('#' + id).children(".product-label").each( function() {   
    var labelName = $(this).data("label"),
        placement = meventi.getViewSize() == "xs" ? "right" : "top",
        options = {
          "placement": "top"
        };
    $(this).attr("data-content", labels.descriptions[$(this).data("label")]);
    $(this).addClass("product-label-" + labelName );
    $(this).attr("data-placement", "left");
    $(this).popover(options).popover("show");
    $(this).click(function(e){
      $(e.target).popover("show");
    });
  });
};

然后我使用jQuery来改变数据的位置,当页面加载。append_slot("js")来自Symfony框架。

    <? append_slot("js") ?>
  meventi.labels.init("<?= $id ?>");
<? end_slot() ?>

当在Chrome开发者工具中查看HTML元素时,我可以看到该元素显示为data-placement="top",但是弹出窗口仍然出现在左边,就像它最初设置的

"doge"没有找到类,你需要"。doge"。

尝试改变

  $("doge").attr("data-placement", "top");

  $(".doge").attr("data-placement", "top");

当然不行,你有打字错误,没有附加处理程序。

$(document).ready(function(){
  $(".doge").attr("data-placement", "top");
});

明白了!

在声明数据位置$(this).attr("data-placement", "left");

之后,必须调用全局启动所有带有$('[data-toggle=popover],[rel=popover]').popover();的弹出窗口

改变数据内容如meventi.labels.descriptions[$(this).data("label")]);等数据可以在$('[data-toggle=popover],[rel=popover]').popover();之后调用

你也可以通过jQuery的data()方法来编辑数据属性:

 $(".doge").data("placement", "top");