我是新創作的jQuery插件,但我有很多使用它們的經驗。有些插件我已經只能以編程方式初始化工作,即創建一個基於HTML類和名稱初始化自己的jQuery插件
$("input[name='blah']").fancyPants();
我覺得這樣不方便,但我設法弄清楚如何從教程編寫一個基本的插件,這樣並通過尋找其他插件碼。
其他人,如引導程序的模態分量,可純粹通過標記初始化,即
<input type='text' name='blah' class='fancy-pants'>
然後就是通過包括插件js文件,與類fancy-pants
被自動初始化爲fancyPants
插件任何輸入。我喜歡這種行爲,即使我知道它擁有一個特定的類名。
問題1:他們怎麼做到這一點?我通過bootstrap.js
看,但似乎有很多我不明白。
問題2: 假設我有一個包含DOM中多個元素的插件。例如,
<button class="bootstrapradio" name="primary_group" value="epicurist"><i class='fa fa-cutlery'></i></button>
<button class="bootstrapradio" name="primary_group" value="futurist"><i class='fa fa-space-shuttle'></i></button>
<button class="bootstrapradio" name="primary_group" value="stoic"><i class='fa fa-tree'></i></button>
<button class="bootstrapradio" name="beverage" value="beer"><i class='fa fa-beer'></i></button>
<button class="bootstrapradio" name="beverage" value="martini"><i class='fa fa-glass'></i></button>
在不改變標記結構(如添加的包裝容器),我怎麼能自動初始化我的插件,一個涵蓋了所有的按鈕一類的bootstrapradio
和名稱primary_group
的兩個實例,另一個涵蓋了所有類別爲bootstrapradio
和名稱beverage
的按鈕?
編輯:這就是我現在正在工作。
(function ($) {
var methods = {
init : function(options) {
// Initialization method, adds classes to elements and binds events
...
return this;
},
value : function(new_val) {
// Method to get/set value
...
}
};
$.fn.bootstrapradio = function(methodOrOptions) {
if (methods[methodOrOptions]) {
return methods[ methodOrOptions ].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof methodOrOptions === 'object' || ! methodOrOptions) {
// Default to "init"
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + methodOrOptions + ' does not exist on jQuery.bootstrapradio');
}
};
}(jQuery));
我想如何這個插件來改造DOM的一個例子:
前document.ready
:
<button class="bootstrapradio" name="primary_group" value="epicurist" title='Epicurist' disabled><i class='fa fa-cutlery'></i></button>
<button class="bootstrapradio" name="primary_group" value="futurist" title='Futurist'><i class='fa fa-space-shuttle'></i></button>
<button class="bootstrapradio" name="primary_group" value="stoic" title='Stoic'><i class='fa fa-tree'></i></button>
<button class="bootstrapradio" name="beverage" value="beer" title='Beer'><i class='fa fa-beer'></i></button>
<button class="bootstrapradio" name="beverage" value="martini" title='Martini'><i class='fa fa-glass'></i></button>
後document.ready
:
<button class="btn btn-xs bootstrapradio" name="primary_group" value="epicurist" title='Epicurist' disabled><i class='fa fa-cutlery'></i></button>
<button class="btn btn-xs bootstrapradio" name="primary_group" value="futurist" title='Futurist'><i class='fa fa-space-shuttle'></i></button>
<button class="btn btn-xs bootstrapradio" name="primary_group" value="stoic" title='Stoic'><i class='fa fa-tree'></i></button>
<input type="hidden" name="primary_group">
<button class="btn btn-xs bootstrapradio" name="beverage" value="beer" title='Beer'><i class='fa fa-beer'></i></button>
<button class="btn btn-xs bootstrapradio" name="beverage" value="martini" title='Martini'><i class='fa fa-glass'></i></button>
<input type="hidden" name="beverage">
究竟你的意思是什麼初始化? – ArtOfCode 2014-08-31 19:33:30
我想OP想知道如何使用'data-role = modal'和類似的屬性來觸發特定的JS事件。 @ArtOfCode – Newtt 2014-08-31 19:35:34
是的,我明白了,我只是不知道他在這個初始化過程中想做什麼。 – ArtOfCode 2014-08-31 19:37:04