jquery.selectboxes.js
3.89 KB
(function($){$.fn.addOption=function(){var add=function(el,v,t,sO){var option=document.createElement("option");option.value=v,option.text=t;var o=el.options;var oL=o.length;if(!el.cache){el.cache={};for(var i=0;i<oL;i++){el.cache[o[i].value]=i}}if(typeof el.cache[v]=="undefined"){el.cache[v]=oL}el.options[el.cache[v]]=option;if(sO){option.selected=true}};var a=arguments;if(a.length==0){return this}var sO=true;var m=false;var items,v,t;if(typeof (a[0])=="object"){m=true;items=a[0]}if(a.length>=2){if(typeof (a[1])=="boolean"){sO=a[1]}else{if(typeof (a[2])=="boolean"){sO=a[2]}}if(!m){v=a[0];t=a[1]}}this.each(function(){if(this.nodeName.toLowerCase()!="select"){return }if(m){for(var item in items){add(this,item,items[item],sO)}}else{add(this,v,t,sO)}});return this};$.fn.ajaxAddOption=function(url,params,select,fn,args){if(typeof (url)!="string"){return this}if(typeof (params)!="object"){params={}}if(typeof (select)!="boolean"){select=true}this.each(function(){var el=this;$.getJSON(url,params,function(r){$(el).addOption(r,select);if(typeof fn=="function"){if(typeof args=="object"){fn.apply(el,args)}else{fn.call(el)}}})});return this};$.fn.removeOption=function(){var a=arguments;if(a.length==0){return this}var ta=typeof (a[0]);var v,index;if(ta=="string"||ta=="object"||ta=="function"){v=a[0];if(v.constructor==Array){var l=v.length;for(var i=0;i<l;i++){this.removeOption(v[i],a[1])}return this}}else{if(ta=="number"){index=a[0]}else{return this}}this.each(function(){if(this.nodeName.toLowerCase()!="select"){return }if(this.cache){this.cache=null}var remove=false;var o=this.options;if(!!v){var oL=o.length;for(var i=oL-1;i>=0;i--){if(v.constructor==RegExp){if(o[i].value.match(v)){remove=true}}else{if(o[i].value==v){remove=true}}if(remove&&a[1]===true){remove=o[i].selected}if(remove){o[i]=null}remove=false}}else{if(a[1]===true){remove=o[index].selected}else{remove=true}if(remove){this.remove(index)}}});return this};$.fn.sortOptions=function(ascending){var a=typeof (ascending)=="undefined"?true:!!ascending;this.each(function(){if(this.nodeName.toLowerCase()!="select"){return }var o=this.options;var oL=o.length;var sA=[];for(var i=0;i<oL;i++){sA[i]={v:o[i].value,t:o[i].text}}sA.sort(function(o1,o2){o1t=o1.t.toLowerCase(),o2t=o2.t.toLowerCase();if(o1t==o2t){return 0}if(a){return o1t<o2t?-1:1}else{return o1t>o2t?-1:1}});for(var i=0;i<oL;i++){o[i].text=sA[i].t;o[i].value=sA[i].v}});return this};$.fn.selectOptions=function(value,clear){var v=value;var vT=typeof (value);var c=clear||false;if(vT!="string"&&vT!="function"&&vT!="object"){return this}this.each(function(){if(this.nodeName.toLowerCase()!="select"){return this}var o=this.options;var oL=o.length;for(var i=0;i<oL;i++){if(v.constructor==RegExp){if(o[i].value.match(v)){o[i].selected=true}else{if(c){o[i].selected=false}}}else{if(o[i].value==v){o[i].selected=true}else{if(c){o[i].selected=false}}}}});return this};$.fn.copyOptions=function(to,which){var w=which||"selected";if($(to).size()==0){return this}this.each(function(){if(this.nodeName.toLowerCase()!="select"){return this}var o=this.options;var oL=o.length;for(var i=0;i<oL;i++){if(w=="all"||(w=="selected"&&o[i].selected)){$(to).addOption(o[i].value,o[i].text)}}});return this};$.fn.containsOption=function(value,fn){var found=false;var v=value;var vT=typeof (v);var fT=typeof (fn);if(vT!="string"&&vT!="function"&&vT!="object"){return fT=="function"?this:found}this.each(function(){if(this.nodeName.toLowerCase()!="select"){return this}if(found&&fT!="function"){return false}var o=this.options;var oL=o.length;for(var i=0;i<oL;i++){if(v.constructor==RegExp){if(o[i].value.match(v)){found=true;if(fT=="function"){fn.call(o[i],i)}}}else{if(o[i].value==v){found=true;if(fT=="function"){fn.call(o[i],i)}}}}});return fT=="function"?this:found};$.fn.selectedValues=function(){var v=[];this.find("option:selected").each(function(){v[v.length]=this.value});return v};$.fn.selectedOptions=function(){return this.find("option:selected")}})(jQuery);