jQueryを少し便利にする5つの関数
jQueryはよく使うのだけど、ちょっとだけ不便なときがあったので、それに対応する関数を書いてみた。
クラスを生成する
var Class = $.klass({ init: function (a) { this.a = a; }, view: function () { alert(this.a) } });
initがコンストラクタとして機能します。
$.klass=function(a){var b=function(){this.init&&this.init.apply(this,arguments)};b.prototype=a;return b};
CSSルールの追加削除
var index = $.css.add("body{background:red;}"); alert("stop"); $.css.remove(index);
あると便利なときがあるので一応。
$.css.add=function(a,b){var c=$.css.sheet,d=!$.browser.msie,e=document,f,g,h=-1,i="replace",j="appendChild";if(!c){if(d){c=e.createElement("style");c[j](e.createTextNode(""));e.documentElement[j](c);c=c.sheet}else{c=e.createStyleSheet()}$.css.sheet=c}if(d)return c.insertRule(a,b||c.cssRules.length);if((f=a.indexOf("{"))!==-1){a=a[i](/[\{\}]/g,"");c.addRule(a.slice(0,f)[i](g=/^\s+|\s+$/g,""),a.slice(f)[i](g,""),h=b||c.rules.length)}return h}; $.css.remove=function(a){var b=$.css.sheet;b&&b[$.browser.msie?"removeRule":"deleteRule"](a)};
クッキー
$.cookie("name", "value"); alert($.cookie("name"));
デフォルトで対応していないのが不思議。
$.cookie=function(a,b,c){var d=document;if(b===void 0){c=(";"+d.cookie+";").match(new RegExp(";\\s*"+a+"=(.*?)\\s*;"));return c?decodeURIComponent(c[1]):null}c=c||{};var e=f="",g=c.expires,h,i="toUTCString";if(b===null){b=f;g=-1}if(g){if(!g[i]){h=parseInt(g,10);g=new Date;g.setTime(g.getTime()+h*86400000)}e=";expires="+g[i]()}d.cookie=[a,"=",encodeURIComponent(b),e,(h=c.path)?";path="+h:f,(h=c.domain)?";domain="+h:f,c.secure?";secure":f].join(f)};
画像やiframeやJavaScriptやFlashの追加
$("#image").media("test.gif"); $("#flash").media("test.swf"); $("#script").media("test.js"); $("#iframe").media("http://example.com"); // 第二引数で種類を指定できる。 $("#img").media("logo", "img");
拡張子によって、適当に判断して、指定された要素(JavaScriptは指定された要素の存在するdocumentのhtml要素)に追加する。
$.fn.media=function(a,b){if(!this.length)return $([]);if(typeof a!=="object")a={src:a};if(!b)b=/[^.]*$/.exec(a.src.replace(/\?.*$/,""))[0];function c(a,b){b="replace";return(""+a)[b](/&/g,"&")[b](/</g,"<")[b](/>/g,">")[b](/"/g,""")}var d=document,e="toLowerCase",f="hasOwnProperty",g="createElement",h="setAttribute",i="appendChild",j="object",k="classid",l,m,n={swf:1,js:2,img:3,bmp:3,gif:3,png:3,jpg:3,jpeg:3}[(""+b)[e]()];if(n===1){var o=a.params||{},p;delete a.params;if($.browser.msie){o.movie=a.src;delete a.src;this.append(d[g](j));m=this.find(j);var q='<'+j+' '+k+'="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"',r=0,s=m.length;for(l in a)if(a[f](l)&&l[e]()!==k)q+=" "+c(l)+'="'+c(a[l])+'"';q+='>';for(l in o)if(o[f](l))q+='<param name="'+c(l)+'" value="'+c(o[l])+'" />';q+='</'+j+'>';for(;r<s;++r)m[r].outerHTML=q;return this.find(j)}else{a.data=a.src;delete a.src;m=d[g](j);m[h]("type","application/x-shockwave-flash");for(l in a)if(a[f](l)&&l[e]()!==k)m[h](l,a[l]);for(l in o)if(o[f](l)){p=d[g]("param");p[h]("name",l);p[h]("value",o[l]);m[i](p)}this.append(m)}}else{m=d[g](n===2?"script":n===3?"img":"iframe");if(n===2)m[h]("charset","UTF-8");for(l in a)if(a[f](l))m[h](l,a[l]);if(n===2)this[0].ownerDocument.documentElement[i](m);else this.append(m)}return $(m)};
jquery.lib.js
こういう名前付けて、読み込むのが最近の癖です。
$.klass=function(a){var b=function(){this.init&&this.init.apply(this,arguments)};b.prototype=a;return b}; $.css.add=function(a,b){var c=$.css.sheet,d=!$.browser.msie,e=document,f,g,h=-1,i="replace",j="appendChild";if(!c){if(d){c=e.createElement("style");c[j](e.createTextNode(""));e.documentElement[j](c);c=c.sheet}else{c=e.createStyleSheet()}$.css.sheet=c}if(d)return c.insertRule(a,b||c.cssRules.length);if((f=a.indexOf("{"))!==-1){a=a[i](/[\{\}]/g,"");c.addRule(a.slice(0,f)[i](g=/^\s+|\s+$/g,""),a.slice(f)[i](g,""),h=b||c.rules.length)}return h}; $.css.remove=function(a){var b=$.css.sheet;b&&b[$.browser.msie?"removeRule":"deleteRule"](a)}; $.cookie=function(a,b,c){var d=document;if(b===void 0){c=(";"+d.cookie+";").match(new RegExp(";\\s*"+a+"=(.*?)\\s*;"));return c?decodeURIComponent(c[1]):null}c=c||{};var e=f="",g=c.expires,h,i="toUTCString";if(b===null){b=f;g=-1}if(g){if(!g[i]){h=parseInt(g,10);g=new Date;g.setTime(g.getTime()+h*86400000)}e=";expires="+g[i]()}d.cookie=[a,"=",encodeURIComponent(b),e,(h=c.path)?";path="+h:f,(h=c.domain)?";domain="+h:f,c.secure?";secure":f].join(f)}; $.fn.media=function(a,b){if(!this.length)return $([]);if(typeof a!=="object")a={src:a};if(!b)b=/[^.]*$/.exec(a.src.replace(/\?.*$/,""))[0];function c(a,b){b="replace";return(""+a)[b](/&/g,"&")[b](/</g,"<")[b](/>/g,">")[b](/"/g,""")}var d=document,e="toLowerCase",f="hasOwnProperty",g="createElement",h="setAttribute",i="appendChild",j="object",k="classid",l,m,n={swf:1,js:2,img:3,bmp:3,gif:3,png:3,jpg:3,jpeg:3}[(""+b)[e]()];if(n===1){var o=a.params||{},p;delete a.params;if($.browser.msie){o.movie=a.src;delete a.src;this.append(d[g](j));m=this.find(j);var q='<'+j+' '+k+'="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"',r=0,s=m.length;for(l in a)if(a[f](l)&&l[e]()!==k)q+=" "+c(l)+'="'+c(a[l])+'"';q+='>';for(l in o)if(o[f](l))q+='<param name="'+c(l)+'" value="'+c(o[l])+'" />';q+='</'+j+'>';for(;r<s;++r)m[r].outerHTML=q;return this.find(j)}else{a.data=a.src;delete a.src;m=d[g](j);m[h]("type","application/x-shockwave-flash");for(l in a)if(a[f](l)&&l[e]()!==k)m[h](l,a[l]);for(l in o)if(o[f](l)){p=d[g]("param");p[h]("name",l);p[h]("value",o[l]);m[i](p)}this.append(m)}}else{m=d[g](n===2?"script":n===3?"img":"iframe");if(n===2)m[h]("charset","UTF-8");for(l in a)if(a[f](l))m[h](l,a[l]);if(n===2)this[0].ownerDocument.documentElement[i](m);else this.append(m)}return $(m)};