このパターンの利点:
jQuery オブジェクト、コンポーネント、インスタンス間で参照を維持できます。
コードは明確です。
簡単に拡張できます。
いくつかの複雑な機構を取り除き、コンポーネントを手作業で完成させることができます。
最後の点が最も興味深いです。このパターンに従えば、コンストラクターとプロトタイプ メソッドの両方を自由に制御できます。取り除くことができるのは継承されたハックの一部であり、jQuery さえも必要ありません。
手作りのものは常に最高です。
簡単なデモ
/*
* @by ambar_li
* @create 2010-11-30
* タグの選択、検証
*/
(function($){
var tagSelector = function(input,options){
var me = this;
var opt = me.opt = $.extend({
limit : 5
,tags : null
,delimiter : ','
}, オプション || {});
var $el = me.input = $(input); 🎜>if (!$el.length || !$tags.length) return;
$tags.click(function(e){
e.preventDefault();
var tag = $(this ).text ();
me[me.has(tag)?'remove':'add'](tag)
};
tagSelector.prototype = {
add : function(tag){
if(tag){
var me = this, tags = me.get(), del = me.opt.delimiter;
tags.push(tag); ;
me.input.val( tags.join(del) );
返してください
}
,remove : function(tag){
var me = this 、exist = function(v){ return v !=tag; };
me.input.val( $.grep(me.get(),exist) ); 🎜>、cleanify : function(){
return this.remove();
}
,limit : function(){
var me = this, tags = me.cleanify().get ()
,len = tags.length, max = me.opt.limit;
if(len>max){
me.input.val( tags.slice(0,max) ); 🎜>}
返してください;
}
,has : function(tag){
return $.inArray(tag,this.get()) > 🎜>、get : function(){
var val = $.trim(this.input.val());
return val ? $.split(/[,,] /), $.trim ) : [];
}
};
$.fn.tagSelector = function(options){
return this.each(function(){
$(this) .data( 'tagSelector',new tagSelector(this,options));
})(jQuery);最後の段落。
jQueryUI の比較、初期化チェックがあります:
コードをコピー
コードは次のとおりです:
this. each(function() {
var インスタンス = $.data( this, name );
if ( インスタンス ) {
instance.option( options || {} )._init() ;
} else {
$.data( this, name, new object( options, this ) );
コードをコピーします
コードは次のとおりです:
var $input = $('#tb_tags' ).tagSelector( { tags :'div.tag_group a:not(.btn_tag_more)'} );
var api = $input.data('tagSelector')
// var api = new tagSelector(' #tb_tags',{ tags :'div.tag_group a:not(.btn_tag_more)' });
完全なデモ:
タグ:
カンマで区切って最大 5 つ