首页 > bootstrap插件的写法疑问。

bootstrap插件的写法疑问。

function Plugin(option) {
    return this.each(function () {
      var $this = $(this)
      var data  = $this.data('bs.alert')

      if (!data) $this.data('bs.alert', (data = new Alert(this)))
      if (typeof option == 'string') data[option].call($this)
    })
}

以上代码是bootstrap的alert插件的写法,我的疑问是为什么要each循环执行呢?jquery方法里不是默认就循环的执行事件吗?


$.fn.alert = Plugin
这个是jQuery插件的一个写法,如果你使用选择器后这里的this指向的是你选择的元素集,比如$('.xxx'),这样可能会有很多歌匹配的元素,上面的就会遍历你选择的这些元素,一起种一个为例:

  var $this = $(this)
  var data  = $this.data('bs.alert')
  if (!data) $this.data('bs.alert', (data = new Alert(this)))
  if (typeof option == 'string') data[option].call($this)

这里是什么意思呢?
1.看你有没有在当前这个元素“alert”过,有的话直接执行你对应传过来的option方法(data[option].call($this)),参数就是$this;
2.没有“alert”过就在当前元素上做一个alert, data = new Alert(this),就是个单例,之后再执行;
你进入了一个误区,这里的each循环的不是事件

【热门文章】
【热门文章】