【发布时间】:2012-03-12 07:14:32
【问题描述】:
我正在使用引导程序,我查看了它的 jQuery 插件bootstrap-alert.js,但我无法完全理解。代码发布在下面:
!function( $ ){
"use strict"
/* ALERT CLASS DEFINITION
* ====================== */
var dismiss = '[data-dismiss="alert"]'
, Alert = function ( el ) {
$(el).on('click', dismiss, this.close)
}
Alert.prototype = {
constructor: Alert
, close: function ( e ) {
var $this = $(this)
, selector = $this.attr('data-target')
, $parent
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
$parent = $(selector)
$parent.trigger('close')
e && e.preventDefault()
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
$parent.removeClass('in')
function removeElement() {
$parent.remove()
$parent.trigger('closed')
}
$.support.transition && $parent.hasClass('fade') ?
$parent.on($.support.transition.end, removeElement) :
removeElement()
}
}
/* ALERT PLUGIN DEFINITION
* ======================= */
$.fn.alert = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('alert')
if (!data) $this.data('alert', (data = new Alert(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.alert.Constructor = Alert
/* ALERT DATA-API
* ============== */
$(function () {
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
})
}( window.jQuery )
这几乎是所有插件中最简单的一个。我不明白的是
1.selector 是什么?data-target 无处可寻……那么,$this.attr('data-target') 做什么?
2.这个插件作为一个整体是如何工作的?正如文档所说,它分为三个部分,它是如何相互交互的?
编辑:还有一点我不太明白。这部分:
functionremoveElement() {
$parent.remove()
$parent.trigger('closed')
}
首先删除元素,然后以某种方式调用一个根本没有定义的函数,使用一些已经删除的对象。closed 在哪里?
谢谢,G
【问题讨论】: