使用 jQuery 动态添加 Prev Next 作为 Bootstrap Modal 按钮

Posted

技术标签:

【中文标题】使用 jQuery 动态添加 Prev Next 作为 Bootstrap Modal 按钮【英文标题】:Using jQuery to dynamically add Prev Next as Bootstrap Modal buttons 【发布时间】:2018-08-28 23:31:18 【问题描述】:

我似乎在使用 jQuery 动态添加按钮并且这些按钮丢失时遇到了问题。我已验证这些按钮之前已添加到 DOM。

我有这个包含 4 个按钮的 codepen。每个按钮都会打开一个模式,如下图所示

我正在使用 jQuery 为每个模态添加 Prev 和 Next 按钮,除了第一个模态仅添加一个 Next 按钮,最后一个模态仅添加一个 Prev 按钮。我正在使用 jQuery 来执行此任务。代码如下:

$(function() 

  var $modals = $('[data-toggle="modal"]');
  var mCount = $modals.length;
  var el = $('.modal-footer').children();

  var prevButton = $("<button type='button' class='btn btn-default' data-dismiss='modal'>Prev</button>");
 var nextButton = $('<button type="button" class="btn btn-default" data-dismiss="modal">Next</button>');


  for (var i = 0; i < mCount; i++) 
    if ( i === 0 ) 
      $(el[i]).after(nextButton);
     else if ( i === mCount -1 ) 
      $(el[i]).before(prevButton);
     else 
      $(el[i]).before(prevButton);
      $(el[i]).after(nextButton); 
    
  
);

我使用 Chrome 开发工具在每个循环结束时设置断点运行跟踪,我看到按钮已创建。但是,在下一次迭代期间,添加的按钮将从 DOM 中消失。希望有人能阐明我做错了什么。

在 jQuery 完成 1 个循环之后,我的 html 中的第一个模态页脚。从 chrome 开发工具粘贴,这表明添加了 Next 按钮:(到目前为止很好)

<div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    <button type="button" class="btn btn-default" data-dismiss="modal">Next</button>
</div>

在第二个循环之后。第一个模态页脚不再有 Next 按钮,但第二个模态页脚添加了 Prev 和 Next 按钮。 (第一个模式上的按钮是如何被删除的?)

<div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Prev</button>
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    <button type="button" class="btn btn-default" data-dismiss="modal">Next</button>
</div>

在第三个循环之后。第二个模态页脚不再有 Prev 和 Next 按钮。第三个模态页脚添加了 Prev 和 Next 按钮。

在第 4 个循环之后,第 3 个模态页脚的 Prev 按钮被移除(为什么?),第 4 个模态页脚是正确的。没有丢失的按钮。

【问题讨论】:

【参考方案1】:

改变

var prevButton = $("<button type='button' class='btn btn-default' data-dismiss='modal'>Prev</button>");

var prevButton = "<button type='button' class='btn btn-default' data-dismiss='modal'>Prev</button>";

(即删除$() 包装器)

当您使用$("..") 时,您会创建一个新节点并将.after/.before 移动该节点到新位置。

当你使用纯文本时,它每次都会为你创建一个新节点,所以不会移动它。

【讨论】:

很好的答案。当我从try.jquery.com/levels/3/sections/4 的工作幻灯片中获取信息时,可能会节省我以后遇到重复此错误的机会。这告诉我把它放在 $() 包装器中。 公平地说,该幻灯片是正确的,但仅在非常有限的情况下使用 - 即添加一个&lt;p&gt;。在这些幻灯片中没有走得太远,因为它们很难阅读,但下一张说 price.appendTo($('.vacation')); 这也令人困惑,因为它可能只是 price.appendTo('.vacation'); 您也可以在 for 循环 inside 中声明 var prevButton,这样每次都会使用不同的按钮。【参考方案2】:

我已经更新了你的 codepen。请在此处查看。

https://codepen.io/smitraval27/pen/Ldxrey

// javascript object patterns
$(function() 

  var $modals = $('[data-toggle="modal"]');
  var mCount = $modals.length;
  var el = $('.modal-footer').children();

  var prevButton = "<button type='button' class='btn btn-default' data-dismiss='modal'>Prev</button>";
 var nextButton = '<button type="button" class="btn btn-default" data-dismiss="modal">Next</button>';

  for (var i = 0; i < mCount; i++) 
    if ( i === 0 ) 
      $(el[i]).after(nextButton);
     else if ( i === mCount -1 ) 
      $(el[i]).before(prevButton);
     else 
      $(el[i]).before(prevButton);
      $(el[i]).after(nextButton); 
    
  
);

【讨论】:

meta.***.com/questions/300837/…

以上是关于使用 jQuery 动态添加 Prev Next 作为 Bootstrap Modal 按钮的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 中的每个循环的 Next 和 Prev 按钮功能

Google rel="next/prev" 用于动态分页?

将 Prev Next 控件添加到 Carousel

循环画廊使用 next() 和 prev() 方法的问题 - javascript / jQuery

jquery遍历节点 children(),next(),prev(),siblings()closest()

jquery中获取相邻元素相关的命令:next()prev()和siblings()