更改指定bootstrap"modal-open"类而不是body的位置

Thi*_*ion 11 twitter-bootstrap

目前

modal-open
Run Code Online (Sandbox Code Playgroud)

打开模态时分配给正文.如何更改添加类的位置而不是正文.

谢谢你的帮助.

MrP*_*rPk 10

你必须改变添加modal-open的js.作为行为,这有点奇怪,无论如何你可以轻声或粗暴地做.

轻轻地:截取模态单击以显示并删除类到主体添加到另一个元素:

//首先将Modal添加到Body中,然后将其删除并添加到另一个元素中

$('#myModal').on('shown.bs.modal', function (e) {
  $('body').removeClass('modal-open');
  $('#myCustomElement').addClass('modal-open');
})
Run Code Online (Sandbox Code Playgroud)

然后拦截模态的结束并添加第二次删除的执行:

$('#myModal').on('hidden.bs.modal', function (e) {
   $('#myCustomElement').removeClass('modal-open');
})
Run Code Online (Sandbox Code Playgroud)

残酷的方法,避免模态打开它不必要添加到body元素:进入TwitterBootstrap目录> js打开modal.js搜索modal-open,你会发现(在3.2.0版本上):

 Modal.prototype.show
Run Code Online (Sandbox Code Playgroud)

你会找到

this.$body.addClass('modal-open')
Run Code Online (Sandbox Code Playgroud)

Modal.prototype.hide 你会找到

this.$body.removeClass('modal-open')
Run Code Online (Sandbox Code Playgroud)

你要改的目标addClassremoveClass并更换这些说明,如果你有一个固定的元素是很简单(例如:$('#myFixedElement').addClass('modal-open')如果它是一个动态的元素,它是复杂的,你就必须再次进行拦截显示功能添加global var在JS让modal.js知道并阅读你的目标元素.但你也可以改变这些功能的签名,但我真的不建议你这样做,基本上你会让你的代码太难以保持.