HTML代码
< link rel= "stylesheet" type= "text/css" href= "style.css" / >
< / head>
< body>
< div id= "container" >
< textarea id= "write" rows= "6" cols= "60" > < / textarea>
< ul id= "keyboard" >
< li class = "symbol" > < span class = "off" > `< / span> < span class = "on" > ~ < / span> < / li>
< li class = "symbol" > < span class = "off" > 1 < / span> < span class = "on" > ! < / span> < / li>
< li class = "symbol" > < span class = "off" > 2 < / span> < span class = "on" > @< / span> < / li>
< li class = "symbol" > < span class = "off" > 3 < / span> < span class = "on" > #< / span> < / li>
< li class = "symbol" > < span class = "off" > 4 < / span> < span class = "on" > $< / span> < / li>
< li class = "symbol" > < span class = "off" > 5 < / span> < span class = "on" > % < / span> < / li>
< li class = "symbol" > < span class = "off" > 6 < / span> < span class = "on" > ^ < / span> < / li>
< li class = "symbol" > < span class = "off" > 7 < / span> < span class = "on" > & amp; < / span> < / li>
< li class = "symbol" > < span class = "off" > 8 < / span> < span class = "on" > * < / span> < / li>
< li class = "symbol" > < span class = "off" > 9 < / span> < span class = "on" > ( < / span> < / li>
< li class = "symbol" > < span class = "off" > 0 < / span> < span class = "on" > ) < / span> < / li>
< li class = "symbol" > < span class = "off" > - < / span> < span class = "on" > _< / span> < / li>
< li class = "symbol" > < span class = "off" >= < / span> < span class = "on" > + < / span> < / li>
< li class = "delete lastitem" > delete < / li>
< li class = "tab" > tab< / li>
< li class = "letter" > q< / li>
< li class = "letter" > w< / li>
< li class = "letter" > e< / li>
< li class = "letter" > r< / li>
< li class = "letter" > t< / li>
< li class = "letter" > y< / li>
< li class = "letter" > u< / li>
< li class = "letter" > i< / li>
< li class = "letter" > o< / li>
< li class = "letter" > p< / li>
< li class = "symbol" > < span class = "off" > [ < / span> < span class = "on" > { < / span> < / li>
< li class = "symbol" > < span class = "off" > ] < / span> < span class = "on" > } < / span> < / li>
< li class = "symbol lastitem" > < span class = "off" > \< / span> < span class = "on" > | < / span> < / li>
< li class = "capslock" > caps lock< / li>
< li class = "letter" > a< / li>
< li class = "letter" > s< / li>
< li class = "letter" > d< / li>
< li class = "letter" > f< / li>
< li class = "letter" > g< / li>
< li class = "letter" > h< / li>
< li class = "letter" > j< / li>
< li class = "letter" > k< / li>
< li class = "letter" > l< / li>
< li class = "symbol" > < span class = "off" > ; < / span> < span class = "on" > : < / span> < / li>
< li class = "symbol" > < span class = "off" > '< / span> < span class = "on" > & quot; < / span> < / li>
< li class = "return lastitem" > return < / li>
< li class = "left-shift" > shift< / li>
< li class = "letter" > z< / li>
< li class = "letter" > x< / li>
< li class = "letter" > c< / li>
< li class = "letter" > v< / li>
< li class = "letter" > b< / li>
< li class = "letter" > n< / li>
< li class = "letter" > m< / li>
< li class = "symbol" > < span class = "off" > , < / span> < span class = "on" > & lt; < / span> < / li>
< li class = "symbol" > < span class = "off" > . < / span> < span class = "on" > & gt; < / span> < / li>
< li class = "symbol" > < span class = "off" > / < / span> < span class = "on" > ? < / span> < / li>
< li class = "right-shift lastitem" > shift< / li>
< li class = "space lastitem" > & nbsp; < / li>
< / ul>
< / div>
< script type= "text/javascript" src= "jquery-3.3.1.js" > < / script>
< script type= "text/javascript" src= "keyboard.js" > < / script>
< / body>
jQuery代码
( function ( ) { var l= this , g, y= l. jQuery, p= l. $, o= l. jQuery= l. $ = function ( E , F ) { return new o. fn. init ( E , F ) } , D = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/ , f= /^.[^:#\[\.,]*$/ ; o. fn= o. prototype= { init: function ( E , H ) { E = E || document; if ( E . nodeType) { this [ 0 ] = E ; this . length= 1 ; this . context= E ; return this } if ( typeof E === "string" ) { var G = D . exec ( E ) ; if ( G && ( G [ 1 ] || ! H ) ) { if ( G [ 1 ] ) { E = o. clean ( [ G [ 1 ] ] , H ) } else { var I = document. getElementById ( G [ 3 ] ) ; if ( I && I . id!= G [ 3 ] ) { return o ( ) . find ( E ) } var F = o ( I || [ ] ) ; F . context= document; F . selector= E ; return F } } else { return o ( H ) . find ( E ) } } else { if ( o. isFunction ( E ) ) { return o ( document) . ready ( E ) } } if ( E . selector&& E . context) { this . selector= E . selector; this . context= E . context} return this . setArray ( o. isArray ( E ) ? E : o. makeArray ( E ) ) } , selector: "" , jquery: "1.3.2" , size: function ( ) { return this . length} , get : function ( E ) { return E === g? Array. prototype. slice. call ( this ) : this [ E ] } , pushStack: function ( F , H , E ) { var G = o ( F ) ; G . prevObject= this ; G . context= this . context; if ( H === "find" ) { G . selector= this . selector+ ( this . selector? " " : "" ) + E } else { if ( H ) { G . selector= this . selector+ "." + H + "(" + E + ")" } } return G } , setArray: function ( E ) { this . length= 0 ; Array. prototype. push. apply ( this , E ) ; return this } , each: function ( F , E ) { return o. each ( this , F , E ) } , index: function ( E ) { return o. inArray ( E && E . jquery? E [ 0 ] : E , this ) } , attr: function ( F , H , G ) { var E = F ; if ( typeof F === "string" ) { if ( H === g) { return this [ 0 ] && o[ G || "attr" ] ( this [ 0 ] , F ) } else { E = { } ; E [ F ] = H } } return this . each ( function ( I ) { for ( F in E ) { o. attr ( G ? this . style: this , F , o. prop ( this , E [ F ] , G , I , F ) ) } } ) } , css: function ( E , F ) { if ( ( E == "width" || E == "height" ) && parseFloat ( F ) < 0 ) { F = g} return this . attr ( E , F , "curCSS" ) } , text: function ( F ) { if ( typeof F !== "object" && F != null ) { return this . empty ( ) . append ( ( this [ 0 ] && this [ 0 ] . ownerDocument|| document) . createTextNode ( F ) ) } var E = "" ; o. each ( F || this , function ( ) { o. each ( this . childNodes, function ( ) { if ( this . nodeType!= 8 ) { E += this . nodeType!= 1 ? this . nodeValue: o. fn. text ( [ this ] ) } } ) } ) ; return E } , wrapAll: function ( E ) { if ( this [ 0 ] ) { var F = o ( E , this [ 0 ] . ownerDocument) . clone ( ) ; if ( this [ 0 ] . parentNode) { F . insertBefore ( this [ 0 ] ) } F . map ( function ( ) { var G = this ; while ( G . firstChild) { G = G . firstChild} return G } ) . append ( this ) } return this } , wrapInner: function ( E ) { return this . each ( function ( ) { o ( this ) . contents ( ) . wrapAll ( E ) } ) } , wrap: function ( E ) { return this . each ( function ( ) { o ( this ) . wrapAll ( E ) } ) } , append: function ( ) { return this . domManip ( arguments, true , function ( E ) { if ( this . nodeType== 1 ) { this . appendChild ( E ) } } ) } , prepend: function ( ) { return this . domManip ( arguments, true , function ( E ) { if ( this . nodeType== 1 ) { this . insertBefore ( E , this . firstChild) } } ) } , before: function ( ) { return this . domManip ( arguments, false , function ( E ) { this . parentNode. insertBefore ( E , this ) } ) } , after: function ( ) { return this . domManip ( arguments, false , function ( E ) { this . parentNode. insertBefore ( E , this . nextSibling) } ) } , end: function ( ) { return this . prevObject|| o ( [ ] ) } , push: [ ] . push, sort: [ ] . sort, splice: [ ] . splice, find: function ( E ) { if ( this . length=== 1 ) { var F = this . pushStack ( [ ] , "find" , E ) ; F . length= 0 ; o. find ( E , this [ 0 ] , F ) ; return F } else { return this . pushStack ( o. unique ( o. map ( this , function ( G ) { return o. find ( E , G ) } ) ) , "find" , E ) } } , clone: function ( G ) { var E = this . map ( function ( ) { if ( ! o. support. noCloneEvent&& ! o. isXMLDoc ( this ) ) { var I = this . outerHTML; if ( ! I ) { var J = this . ownerDocument. createElement ( "div" ) ; J . appendChild ( this . cloneNode ( true ) ) ; I = J . innerHTML} return o. clean ( [ I . replace ( / jQuery\d+="(?:\d+|null)"/g , "" ) . replace ( /^\s*/ , "" ) ] ) [ 0 ] } else { return this . cloneNode ( true ) } } ) ; if ( G === true ) { var H = this . find ( "*" ) . andSelf ( ) , F = 0 ; E . find ( "*" ) . andSelf ( ) . each ( function ( ) { if ( this . nodeName!== H [ F ] . nodeName) { return } var I = o. data ( H [ F ] , "events" ) ; for ( var K in I ) { for ( var J in I [ K ] ) { o. event. add ( this , K , I [ K ] [ J ] , I [ K ] [ J ] . data) } } F ++ } ) } return E } , filter: function ( E ) { return this . pushStack ( o. isFunction ( E ) && o. grep ( this , function ( G , F ) { return E . call ( G , F ) } ) || o. multiFilter ( E , o. grep ( this , function ( F ) { return F . nodeType=== 1 } ) ) , "filter" , E ) } , closest: function ( E ) { var G = o. expr. match. POS . test ( E ) ? o ( E ) : null , F = 0 ; return this . map ( function ( ) { var H = this ; while ( H && H . ownerDocument) { if ( G ? G . index ( H ) > - 1 : o ( H ) . is ( E ) ) { o. data ( H , "closest" , F ) ; return H } H = H . parentNode; F ++ } } ) } , not: function ( E ) { if ( typeof E === "string" ) { if ( f. test ( E ) ) { return this . pushStack ( o. multiFilter ( E , this , true ) , "not" , E ) } else { E = o. multiFilter ( E , this ) } } var F = E . length&& E [ E . length- 1 ] !== g&& ! E . nodeType; return this . filter ( function ( ) { return F ? o. inArray ( this , E ) < 0 : this != E } ) } , add: function ( E ) { return this . pushStack ( o. unique ( o. merge ( this . get ( ) , typeof E === "string" ? o ( E ) : o. makeArray ( E ) ) ) ) } , is: function ( E ) { return ! ! E && o. multiFilter ( E , this ) . length> 0 } , hasClass: function ( E ) { return ! ! E && this . is ( "." + E ) } , val: function ( K ) { if ( K === g) { var E = this [ 0 ] ; if ( E ) { if ( o. nodeName ( E , "option" ) ) { return ( E . attributes. value|| { } ) . specified? E . value: E . text} if ( o. nodeName ( E , "select" ) ) { var I = E . selectedIndex, L = [ ] , M = E . options, H = E . type== "select-one" ; if ( I < 0 ) { return null } for ( var F = H ? I : 0 , J = H ? I + 1 : M . length; F < J ; F ++ ) { var G = M [ F ] ; if ( G . selected) { K = o ( G ) . val ( ) ; if ( H ) { return K } L . push ( K ) } } return L } return ( E . value|| "" ) . replace ( /\r/g , "" ) } return g} if ( typeof K === "number" ) { K += "" } return this . each ( function ( ) { if ( this . nodeType!= 1 ) { return } if ( o. isArray ( K ) && /radio|checkbox/ . test ( this . type) ) { this . checked= ( o. inArray ( this . value, K ) >= 0 || o. inArray ( this . name, K ) >= 0 ) } else { if ( o. nodeName ( this , "select" ) ) { var N = o. makeArray ( K ) ; o ( "option" , this ) . each ( function ( ) { this . selected= ( o. inArray ( this . value, N ) >= 0 || o. inArray ( this . text, N ) >= 0 ) } ) ; if ( ! N . length) { this . selectedIndex= - 1 } } else { this . value= K } } } ) } , html: function ( E ) { return E === g? ( this [ 0 ] ? this [ 0 ] . innerHTML. replace ( / jQuery\d+="(?:\d+|null)"/g , "" ) : null ) : this . empty ( ) . append ( E ) } , replaceWith: function ( E ) { return this . after ( E ) . remove ( ) } , eq: function ( E ) { return this . slice ( E , + E + 1 ) } , slice: function ( ) { return this . pushStack ( Array. prototype. slice. apply ( this , arguments) , "slice" , Array. prototype. slice. call ( arguments) . join ( "," ) ) } , map: function ( E ) { return this . pushStack ( o. map ( this , function ( G , F ) { return E . call ( G , F , G ) } ) ) } , andSelf: function ( ) { return this . add ( this . prevObject) } , domManip: function ( J , M , L ) { if ( this [ 0 ] ) { var I = ( this [ 0 ] . ownerDocument|| this [ 0 ] ) . createDocumentFragment ( ) , F = o. clean ( J , ( this [ 0 ] . ownerDocument|| this [ 0 ] ) , I ) , H = I . firstChild; if ( H ) { for ( var G = 0 , E = this . length; G < E ; G ++ ) { L . call ( K ( this [ G ] , H ) , this . length> 1 || G > 0 ? I . cloneNode ( true ) : I ) } } if ( F ) { o. each ( F , z) } } return this ; function K ( N , O ) { return M && o. nodeName ( N , "table" ) && o. nodeName ( O , "tr" ) ? ( N . getElementsByTagName ( "tbody" ) [ 0 ] || N . appendChild ( N . ownerDocument. createElement ( "tbody" ) ) ) : N } } } ; o. fn. init. prototype= o. fn; function z ( E , F ) { if ( F . src) { o. ajax ( { url: F . src, async : false , dataType: "script" } ) } else { o. globalEval ( F . text|| F . textContent|| F . innerHTML|| "" ) } if ( F . parentNode) { F . parentNode. removeChild ( F ) } } function e ( ) { return + new Date } o. extend= o. fn. extend = function ( ) { var J = arguments[ 0 ] || { } , H = 1 , I = arguments. length, E = false , G ; if ( typeof J === "boolean" ) { E = J ; J = arguments[ 1 ] || { } ; H = 2 } if ( typeof J !== "object" && ! o. isFunction ( J ) ) { J = { } } if ( I == H ) { J = this ; -- H } for ( ; H < I ; H ++ ) { if ( ( G = arguments[ H ] ) != null ) { for ( var F in G ) { var K = J [ F ] , L = G [ F ] ; if ( J === L ) { continue } if ( E && L && typeof L === "object" && ! L . nodeType) { J [ F ] = o. extend ( E , K || ( L . length!= null ? [ ] : { } ) , L ) } else { if ( L !== g) { J [ F ] = L } } } } } return J } ; var b= /z-?index|font-?weight|opacity|zoom|line-?height/i , q= document. defaultView|| { } , s= Object. prototype. toString; o. extend ( { noConflict: function ( E ) { l. $= p; if ( E ) { l. jQuery= y} return o} , isFunction: function ( E ) { return s. call ( E ) === "[object Function]" } , isArray: function ( E ) { return s. call ( E ) === "[object Array]" } , isXMLDoc: function ( E ) { return E . nodeType=== 9 && E . documentElement. nodeName!== "HTML" || ! ! E . ownerDocument&& o. isXMLDoc ( E . ownerDocument) } , globalEval: function ( G ) { if ( G && /\S/ . test ( G ) ) { var F = document. getElementsByTagName ( "head" ) [ 0 ] || document. documentElement, E = document. createElement ( "script" ) ; E . type= "text/javascript" ; if ( o. support. scriptEval) { E . appendChild ( document. createTextNode ( G ) ) } else { E . text= G } F . insertBefore ( E , F . firstChild) ; F . removeChild ( E ) } } , nodeName: function ( F , E ) { return F . nodeName&& F . nodeName. toUpperCase ( ) == E . toUpperCase ( ) } , each: function ( G , K , F ) { var E , H = 0 , I = G . length; if ( F ) { if ( I === g) { for ( E in G ) { if ( K . apply ( G [ E ] , F ) === false ) { break } } } else { for ( ; H < I ; ) { if ( K . apply ( G [ H ++ ] , F ) === false ) { break } } } } else { if ( I === g) { for ( E in G ) { if ( K . call ( G [ E ] , E , G [ E ] ) === false ) { break } } } else { for ( var J = G [ 0 ] ; H < I && K . call ( J , H , J ) !== false ; J = G [ ++ H ] ) { } } } return G } , prop: function ( H , I , G , F , E ) { if ( o. isFunction ( I ) ) { I = I . call ( H , F ) } return typeof I === "number" && G == "curCSS" && ! b. test ( E ) ? I + "px" : I } , className: { add: function ( E , F ) { o. each ( ( F || "" ) . split ( /\s+/ ) , function ( G , H ) { if ( E . nodeType== 1 && ! o. className. has ( E . className, H ) ) { E . className+= ( E . className? " " : "" ) + H } } ) } , remove: function ( E , F ) { if ( E . nodeType== 1 ) { E . className= F !== g? o. grep ( E . className. split ( /\s+/ ) , function ( G ) { return ! o. className. has ( F , G ) } ) . join ( " " ) : "" } } , has: function ( F , E ) { return F && o. inArray ( E , ( F . className|| F ) . toString ( ) . split ( /\s+/ ) ) > - 1 } } , swap: function ( H , G , I ) { var E = { } ; for ( var F in G ) { E [ F ] = H . style[ F ] ; H . style[ F ] = G [ F ] } I . call ( H ) ; for ( var F in G ) { H . style[ F ] = E [ F ] } } , css: function ( H , F , J , E ) { if ( F == "width" || F == "height" ) { var L , G = { position: "absolute" , visibility: "hidden" , display: "block" } , K = F == "width" ? [ "Left" , "Right" ] : [ "Top" , "Bottom" ] ; function I ( ) { L = F == "width" ? H . offsetWidth: H . offsetHeight; if ( E === "border" ) { return } o. each ( K , function ( ) { if ( ! E ) { L -= parseFloat ( o. curCSS ( H , "padding" + this , true ) ) || 0 } if ( E === "margin" ) { L += parseFloat ( o. curCSS ( H , "margin" + this , true ) ) || 0 } else { L -= parseFloat ( o. curCSS ( H , "border" + this + "Width" , true ) ) || 0 } } ) } if ( H . offsetWidth!== 0 ) { I ( ) } else { o. swap ( H , G , I ) } return Math. max ( 0 , Math. round ( L ) ) } return o. curCSS ( H , F , J ) } , curCSS: function ( I , F , G ) { var L , E = I . style; if ( F == "opacity" && ! o. support. opacity) { L = o. attr ( E , "opacity" ) ; return L == "" ? "1" : L } if ( F . match ( /float/i ) ) { F = w} if ( ! G && E && E [ F ] ) { L = E [ F ] } else { if ( q. getComputedStyle) { if ( F . match ( /float/i ) ) { F = "float" } F = F . replace ( /([A-Z])/g , "-$1" ) . toLowerCase ( ) ; var M = q. getComputedStyle ( I , null ) ; if ( M ) { L = M . getPropertyValue ( F ) } if ( F == "opacity" && L == "" ) { L = "1" } } else { if ( I . currentStyle) { var J = F . replace ( /\-(\w)/g , function ( N , O ) { return O . toUpperCase ( ) } ) ; L = I . currentStyle[ F ] || I . currentStyle[ J ] ; if ( ! /^\d+(px)?$/i . test ( L ) && /^\d/ . test ( L ) ) { var H = E . left, K = I . runtimeStyle. left; I . runtimeStyle. left= I . currentStyle. left; E . left= L || 0 ; L = E . pixelLeft+ "px" ; E . left= H ; I . runtimeStyle. left= K } } } } return L } , clean: function ( F , K , I ) { K = K || document; if ( typeof K . createElement=== "undefined" ) { K = K . ownerDocument|| K [ 0 ] && K [ 0 ] . ownerDocument|| document} if ( ! I && F . length=== 1 && typeof F [ 0 ] === "string" ) { var H = /^<(\w+)\s*\/?>$/ . exec ( F [ 0 ] ) ; if ( H ) { return [ K . createElement ( H [ 1 ] ) ] } } var G = [ ] , E = [ ] , L = K . createElement ( "div" ) ; o. each ( F , function ( P , S ) { if ( typeof S === "number" ) { S += "" } if ( ! S ) { return } if ( typeof S === "string" ) { S = S . replace ( /(<(\w+)[^>]*?)\/>/g , function ( U , V , T ) { return T . match ( /^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i ) ? U : V + ">" + T + ">" } ) ; var O = S . replace ( /^\s+/ , "" ) . substring ( 0 , 10 ) . toLowerCase ( ) ; var Q = ! O . indexOf ( ") && [ 1 , "" , "" ] || ! O . indexOf ( ") && [ 1 , "" , "" ] || O . match ( /^<(thead|tbody|tfoot|colg|cap)/ ) && [ 1 , "" ] || ! O . indexOf ( ") && [ 2 , "" ] || ( ! O . indexOf ( " ) || ! O . indexOf ( " ) ) && [ 3 , "" ] || ! O . indexOf ( ") && [ 2 , "" ] || ! o. support. htmlSerialize&& [ 1 , "div", "
" ] || [ 0 , "" , "" ] ; L . innerHTML= Q [ 1 ] + S + Q [ 2 ] ; while ( Q [ 0 ] -- ) { L = L . lastChild} if ( ! o. support. tbody) { var R = /. test ( S ) , N = ! O . indexOf ( ") && ! R ? L . firstChild&& L . firstChild. childNodes: Q [ 1 ] == ""&& ! R ? L . childNodes: [ ] ; for ( var M = N . length- 1 ; M >= 0 ; -- M ) { if ( o. nodeName ( N [ M ] , "tbody" ) && ! N [ M ] . childNodes. length) { N [ M ] . parentNode. removeChild ( N [ M ] ) } } } if ( ! o. support. leadingWhitespace&& /^\s/ . test ( S ) ) { L . insertBefore ( K . createTextNode ( S . match ( /^\s*/ ) [ 0 ] ) , L . firstChild) } S = o. makeArray ( L . childNodes) } if ( S . nodeType) { G . push ( S ) } else { G = o. merge ( G , S ) } } ) ; if ( I ) { for ( var J = 0 ; G [ J ] ; J ++ ) { if ( o. nodeName ( G [ J ] , "script" ) && ( ! G [ J ] . type|| G [ J ] . type. toLowerCase ( ) === "text/javascript" ) ) { E . push ( G [ J ] . parentNode? G [ J ] . parentNode. removeChild ( G [ J ] ) : G [ J ] ) } else { if ( G [ J ] . nodeType=== 1 ) { G . splice. apply ( G , [ J + 1 , 0 ] . concat ( o. makeArray ( G [ J ] . getElementsByTagName ( "script" ) ) ) ) } I . appendChild ( G [ J ] ) } } return E } return G } , attr: function ( J , G , K ) { if ( ! J || J . nodeType== 3 || J . nodeType== 8 ) { return g} var H = ! o. isXMLDoc ( J ) , L = K !== g; G = H && o. props[ G ] || G ; if ( J . tagName) { var F = /href|src|style/ . test ( G ) ; if ( G == "selected" && J . parentNode) { J . parentNode. selectedIndex} if ( G in J && H && ! F ) { if ( L ) { if ( G == "type" && o. nodeName ( J , "input" ) && J . parentNode) { throw "type property can't be changed" } J [ G ] = K } if ( o. nodeName ( J , "form" ) && J . getAttributeNode ( G ) ) { return J . getAttributeNode ( G ) . nodeValue} if ( G == "tabIndex" ) { var I = J . getAttributeNode ( "tabIndex" ) ; return I && I . specified? I . value: J . nodeName. match ( /(button|input|object|select|textarea)/i ) ? 0 : J . nodeName. match ( /^(a|area)$/i ) && J . href? 0 : g} return J [ G ] } if ( ! o. support. style&& H && G == "style" ) { return o. attr ( J . style, "cssText" , K ) } if ( L ) { J . setAttribute ( G , "" + K ) } var E = ! o. support. hrefNormalized&& H && F ? J . getAttribute ( G , 2 ) : J . getAttribute ( G ) ; return E === null ? g: E } if ( ! o. support. opacity&& G == "opacity" ) { if ( L ) { J . zoom= 1 ; J . filter= ( J . filter|| "" ) . replace ( /alpha\([^)]*\)/ , "" ) + ( parseInt ( K ) + "" == "NaN" ? "" : "alpha(opacity=" + K * 100 + ")" ) } return J . filter&& J . filter. indexOf ( "opacity=" ) >= 0 ? ( parseFloat ( J . filter. match ( /opacity=([^)]*)/ ) [ 1 ] ) / 100 ) + "" : "" } G = G . replace ( /-([a-z])/ig , function ( M , N ) { return N . toUpperCase ( ) } ) ; if ( L ) { J [ G ] = K } return J [ G ] } , trim: function ( E ) { return ( E || "" ) . replace ( /^\s+|\s+$/g , "" ) } , makeArray: function ( G ) { var E = [ ] ; if ( G != null ) { var F = G . length; if ( F == null || typeof G === "string" || o. isFunction ( G ) || G . setInterval) { E [ 0 ] = G } else { while ( F ) { E [ -- F ] = G [ F ] } } } return E } , inArray: function ( G , H ) { for ( var E = 0 , F = H . length; E < F ; E ++ ) { if ( H [ E ] === G ) { return E } } return - 1 } , merge: function ( H , E ) { var F = 0 , G , I = H . length; if ( ! o. support. getAll) { while ( ( G = E [ F ++ ] ) != null ) { if ( G . nodeType!= 8 ) { H [ I ++ ] = G } } } else { while ( ( G = E [ F ++ ] ) != null ) { H [ I ++ ] = G } } return H } , unique: function ( K ) { var F = [ ] , E = { } ; try { for ( var G = 0 , H = K . length; G < H ; G ++ ) { var J = o. data ( K [ G ] ) ; if ( ! E [ J ] ) { E [ J ] = true ; F . push ( K [ G ] ) } } } catch ( I ) { F = K } return F } , grep: function ( F , J , E ) { var G = [ ] ; for ( var H = 0 , I = F . length; H < I ; H ++ ) { if ( ! E != ! J ( F [ H ] , H ) ) { G . push ( F [ H ] ) } } return G } , map: function ( E , J ) { var F = [ ] ; for ( var G = 0 , H = E . length; G < H ; G ++ ) { var I = J ( E [ G ] , G ) ; if ( I != null ) { F [ F . length] = I } } return F . concat. apply ( [ ] , F ) } } ) ; var C = navigator. userAgent. toLowerCase ( ) ; o. browser= { version: ( C . match ( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [ 0 , "0" ] ) [ 1 ] , safari: /webkit/ . test ( C ) , opera: /opera/ . test ( C ) , msie: /msie/ . test ( C ) && ! /opera/ . test ( C ) , mozilla: /mozilla/ . test ( C ) && ! /(compatible|webkit)/ . test ( C ) } ; o. each ( { parent: function ( E ) { return E . parentNode} , parents: function ( E ) { return o. dir ( E , "parentNode" ) } , next: function ( E ) { return o. nth ( E , 2 , "nextSibling" ) } , prev: function ( E ) { return o. nth ( E , 2 , "previousSibling" ) } , nextAll: function ( E ) { return o. dir ( E , "nextSibling" ) } , prevAll: function ( E ) { return o. dir ( E , "previousSibling" ) } , siblings: function ( E ) { return o. sibling ( E . parentNode. firstChild, E ) } , children: function ( E ) { return o. sibling ( E . firstChild) } , contents: function ( E ) { return o. nodeName ( E , "iframe" ) ? E . contentDocument|| E . contentWindow. document: o. makeArray ( E . childNodes) } } , function ( E , F ) { o. fn[ E ] = function ( G ) { var H = o. map ( this , F ) ; if ( G && typeof G == "string" ) { H = o. multiFilter ( G , H ) } return this . pushStack ( o. unique ( H ) , E , G ) } } ) ; o. each ( { appendTo: "append" , prependTo: "prepend" , insertBefore: "before" , insertAfter: "after" , replaceAll: "replaceWith" } , function ( E , F ) { o. fn[ E ] = function ( G ) { var J = [ ] , L = o ( G ) ; for ( var K = 0 , H = L . length; K < H ; K ++ ) { var I = ( K > 0 ? this . clone ( true ) : this ) . get ( ) ; o. fn[ F ] . apply ( o ( L [ K ] ) , I ) ; J = J . concat ( I ) } return this . pushStack ( J , E , G ) } } ) ; o. each ( { removeAttr: function ( E ) { o. attr ( this , E , "" ) ; if ( this . nodeType== 1 ) { this . removeAttribute ( E ) } } , addClass: function ( E ) { o. className. add ( this , E ) } , removeClass: function ( E ) { o. className. remove ( this , E ) } , toggleClass: function ( F , E ) { if ( typeof E !== "boolean" ) { E = ! o. className. has ( this , F ) } o. className[ E ? "add" : "remove" ] ( this , F ) } , remove: function ( E ) { if ( ! E || o. filter ( E , [ this ] ) . length) { o ( "*" , this ) . add ( [ this ] ) . each ( function ( ) { o. event. remove ( this ) ; o. removeData ( this ) } ) ; if ( this . parentNode) { this . parentNode. removeChild ( this ) } } } , empty: function ( ) { o ( this ) . children ( ) . remove ( ) ; while ( this . firstChild) { this . removeChild ( this . firstChild) } } } , function ( E , F ) { o. fn[ E ] = function ( ) { return this . each ( F , arguments) } } ) ; function j ( E , F ) { return E [ 0 ] && parseInt ( o. curCSS ( E [ 0 ] , F , true ) , 10 ) || 0 } var h= "jQuery" + e ( ) , v= 0 , A = { } ; o. extend ( { cache: { } , data: function ( F , E , G ) { F = F == l? A : F ; var H = F [ h] ; if ( ! H ) { H = F [ h] = ++ v} if ( E && ! o. cache[ H ] ) { o. cache[ H ] = { } } if ( G !== g) { o. cache[ H ] [ E ] = G } return E ? o. cache[ H ] [ E ] : H } , removeData: function ( F , E ) { F = F == l? A : F ; var H = F [ h] ; if ( E ) { if ( o. cache[ H ] ) { delete o. cache[ H ] [ E ] ; E = "" ; for ( E in o. cache[ H ] ) { break } if ( ! E ) { o. removeData ( F ) } } } else { try { delete F [ h] } catch ( G ) { if ( F . removeAttribute) { F . removeAttribute ( h) } } delete o. cache[ H ] } } , queue: function ( F , E , H ) { if ( F ) { E = ( E || "fx" ) + "queue" ; var G = o. data ( F , E ) ; if ( ! G || o. isArray ( H ) ) { G = o. data ( F , E , o. makeArray ( H ) ) } else { if ( H ) { G . push ( H ) } } } return G } , dequeue: function ( H , G ) { var E = o. queue ( H , G ) , F = E . shift ( ) ; if ( ! G || G === "fx" ) { F = E [ 0 ] } if ( F !== g) { F . call ( H ) } } } ) ; o. fn. extend ( { data: function ( E , G ) { var H = E . split ( "." ) ; H [ 1 ] = H [ 1 ] ? "." + H [ 1 ] : "" ; if ( G === g) { var F = this . triggerHandler ( "getData" + H [ 1 ] + "!" , [ H [ 0 ] ] ) ; if ( F === g&& this . length) { F = o. data ( this [ 0 ] , E ) } return F === g&& H [ 1 ] ? this . data ( H [ 0 ] ) : F } else { return this . trigger ( "setData" + H [ 1 ] + "!" , [ H [ 0 ] , G ] ) . each ( function ( ) { o. data ( this , E , G ) } ) } } , removeData: function ( E ) { return this . each ( function ( ) { o. removeData ( this , E ) } ) } , queue: function ( E , F ) { if ( typeof E !== "string" ) { F = E ; E = "fx" } if ( F === g) { return o. queue ( this [ 0 ] , E ) } return this . each ( function ( ) { var G = o. queue ( this , E , F ) ; if ( E == "fx" && G . length== 1 ) { G [ 0 ] . call ( this ) } } ) } , dequeue: function ( E ) { return this . each ( function ( ) { o. dequeue ( this , E ) } ) } } ) ;
( function ( ) { var R = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g , L = 0 , H = Object. prototype. toString; var F = function ( Y , U , ab, ac) { ab= ab|| [ ] ; U = U || document; if ( U . nodeType!== 1 && U . nodeType!== 9 ) { return [ ] } if ( ! Y || typeof Y !== "string" ) { return ab} var Z = [ ] , W , af, ai, T , ad, V , X = true ; R . lastIndex= 0 ; while ( ( W = R . exec ( Y ) ) !== null ) { Z . push ( W [ 1 ] ) ; if ( W [ 2 ] ) { V = RegExp. rightContext; break } } if ( Z . length> 1 && M . exec ( Y ) ) { if ( Z . length=== 2 && I . relative[ Z [ 0 ] ] ) { af= J ( Z [ 0 ] + Z [ 1 ] , U ) } else { af= I . relative[ Z [ 0 ] ] ? [ U ] : F ( Z . shift ( ) , U ) ; while ( Z . length) { Y = Z . shift ( ) ; if ( I . relative[ Y ] ) { Y += Z . shift ( ) } af= J ( Y , af) } } } else { var ae= ac? { expr: Z . pop ( ) , set : E ( ac) } : F . find ( Z . pop ( ) , Z . length=== 1 && U . parentNode? U . parentNode: U , Q ( U ) ) ; af= F . filter ( ae. expr, ae. set ) ; if ( Z . length> 0 ) { ai= E ( af) } else { X = false } while ( Z . length) { var ah= Z . pop ( ) , ag= ah; if ( ! I . relative[ ah] ) { ah= ""} else { ag= Z . pop ( ) } if ( ag== null ) { ag= U } I . relative[ ah] ( ai, ag, Q ( U ) ) } } if ( ! ai) { ai= af} if ( ! ai) { throw "Syntax error, unrecognized expression: "+ ( ah|| Y ) } if ( H . call ( ai) === "[ object Array] ") { if ( ! X ) { ab. push. apply ( ab, ai) } else { if ( U . nodeType=== 1 ) { for ( var aa= 0 ; ai[ aa] != null ; aa++ ) { if ( ai[ aa] && ( ai[ aa] === true || ai[ aa] . nodeType=== 1 && K ( U , ai[ aa] ) ) ) { ab. push ( af[ aa] ) } } } else { for ( var aa= 0 ; ai[ aa] != null ; aa++ ) { if ( ai[ aa] && ai[ aa] . nodeType=== 1 ) { ab. push ( af[ aa] ) } } } } } else { E ( ai, ab) } if ( V ) { F ( V , U , ab, ac) ; if ( G ) { hasDuplicate= false ; ab. sort ( G ) ; if ( hasDuplicate) { for ( var aa= 1 ; aa< ab. length; aa++ ) { if ( ab[ aa] === ab[ aa- 1 ] ) { ab. splice ( aa-- , 1 ) } } } } } return ab} ; F . matches = function ( T , U ) { return F ( T , null , null , U ) } ; F . find = function ( aa, T , ab) { var Z , X ; if ( ! aa) { return [ ] } for ( var W = 0 , V = I . order. length; W < V ; W ++ ) { var Y = I . order[ W ] , X ; if ( ( X = I . match[ Y ] . exec ( aa) ) ) { var U = RegExp. leftContext; if ( U . substr ( U . length- 1 ) !== "\\") { X [ 1 ] = ( X [ 1 ] || "") . replace ( /\\/g , "") ; Z = I . find[ Y ] ( X , T , ab) ; if ( Z != null ) { aa= aa. replace ( I . match[ Y ] , "") ; break } } } } if ( ! Z ) { Z = T . getElementsByTagName ( "* ") } return { set : Z , expr: aa} } ; F . filter = function ( ad, ac, ag, W ) { var V = ad, ai= [ ] , aa= ac, Y , T , Z = ac&& ac[ 0 ] && Q ( ac[ 0 ] ) ; while ( ad&& ac. length) { for ( var ab in I . filter) { if ( ( Y = I . match[ ab] . exec ( ad) ) != null ) { var U = I . filter[ ab] , ah, af; T = false ; if ( aa== ai) { ai= [ ] } if ( I . preFilter[ ab] ) { Y = I . preFilter[ ab] ( Y , aa, ag, ai, W , Z ) ; if ( ! Y ) { T = ah= true } else { if ( Y === true ) { continue } } } if ( Y ) { for ( var X = 0 ; ( af= aa[ X ] ) != null ; X ++ ) { if ( af) { ah= U ( af, Y , X , aa) ; var ae= W ^ ! ! ah; if ( ag&& ah!= null ) { if ( ae) { T = true } else { aa[ X ] = false } } else { if ( ae) { ai. push ( af) ; T = true } } } } } if ( ah!== g) { if ( ! ag) { aa= ai} ad= ad. replace ( I . match[ ab] , "") ; if ( ! T ) { return [ ] } break } } } if ( ad== V ) { if ( T == null ) { throw "Syntax error, unrecognized expression: "+ ad} else { break } } V = ad} return aa} ; var I = F . selectors= { order: [ "ID ", "NAME ", "TAG "] , match: { ID : /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/ , CLASS : /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/ , NAME : /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/ , ATTR : /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/ , TAG : /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/ , CHILD : /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/ , POS : /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/ , PSEUDO : /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ } , attrMap: { "class" : "className", "for ": "htmlFor"} , attrHandle: { href: function ( T ) { return T . getAttribute ( "href") } } , relative: { "+ ": function ( aa, T , Z ) { var X = typeof T === "string", ab= X && ! /\W/ . test ( T ) , Y = X && ! ab; if ( ab&& ! Z ) { T = T . toUpperCase ( ) } for ( var W = 0 , V = aa. length, U ; W < V ; W ++ ) { if ( ( U = aa[ W ] ) ) { while ( ( U = U . previousSibling) && U . nodeType!== 1 ) { } aa[ W ] = Y || U && U . nodeName=== T ? U || false : U === T } } if ( Y ) { F . filter ( T , aa, true ) } } , "> ": function ( Z , U , aa) { var X = typeof U === "string"; if ( X && ! /\W/ . test ( U ) ) { U = aa? U : U . toUpperCase ( ) ; for ( var V = 0 , T = Z . length; V < T ; V ++ ) { var Y = Z [ V ] ; if ( Y ) { var W = Y . parentNode; Z [ V ] = W . nodeName=== U ? W : false } } } else { for ( var V = 0 , T = Z . length; V < T ; V ++ ) { var Y = Z [ V ] ; if ( Y ) { Z [ V ] = X ? Y . parentNode: Y . parentNode=== U } } if ( X ) { F . filter ( U , Z , true ) } } } , "": function ( W , U , Y ) { var V = L ++ , T = S ; if ( ! U . match ( /\W/ ) ) { var X = U = Y ? U : U . toUpperCase ( ) ; T = P } T ( "parentNode", U , V , W , X , Y ) } , "~ ": function ( W , U , Y ) { var V = L ++ , T = S ; if ( typeof U === "string"&& ! U . match ( /\W/ ) ) { var X = U = Y ? U : U . toUpperCase ( ) ; T = P } T ( "previousSibling", U , V , W , X , Y ) } } , find: { ID : function ( U , V , W ) { if ( typeof V . getElementById!== "undefined"&& ! W ) { var T = V . getElementById ( U [ 1 ] ) ; return T ? [ T ] : [ ] } } , NAME : function ( V , Y , Z ) { if ( typeof Y . getElementsByName!== "undefined") { var U = [ ] , X = Y . getElementsByName ( V [ 1 ] ) ; for ( var W = 0 , T = X . length; W < T ; W ++ ) { if ( X [ W ] . getAttribute ( "name") === V [ 1 ] ) { U . push ( X [ W ] ) } } return U . length=== 0 ? null : U } } , TAG : function ( T , U ) { return U . getElementsByTagName ( T [ 1 ] ) } } , preFilter: { CLASS : function ( W , U , V , T , Z , aa) { W = " "+ W [ 1 ] . replace ( /\\/g , "") + " "; if ( aa) { return W } for ( var X = 0 , Y ; ( Y = U [ X ] ) != null ; X ++ ) { if ( Y ) { if ( Z ^ ( Y . className&& ( " "+ Y . className+ " ") . indexOf ( W ) >= 0 ) ) { if ( ! V ) { T . push ( Y ) } } else { if ( V ) { U [ X ] = false } } } } return false } , ID : function ( T ) { return T [ 1 ] . replace ( /\\/g , "") } , TAG : function ( U , T ) { for ( var V = 0 ; T [ V ] === false ; V ++ ) { } return T [ V ] && Q ( T [ V ] ) ? U [ 1 ] : U [ 1 ] . toUpperCase ( ) } , CHILD : function ( T ) { if ( T [ 1 ] == "nth") { var U = /(-?)(\d*)n((?:\+|-)?\d*)/ . exec ( T [ 2 ] == "even"&& "2 n"|| T [ 2 ] == "odd"&& "2 n+ 1 "|| ! /\D/ . test ( T [ 2 ] ) && "0 n+ "+ T [ 2 ] || T [ 2 ] ) ; T [ 2 ] = ( U [ 1 ] + ( U [ 2 ] || 1 ) ) - 0 ; T [ 3 ] = U [ 3 ] - 0 } T [ 0 ] = L ++ ; return T } , ATTR : function ( X , U , V , T , Y , Z ) { var W = X [ 1 ] . replace ( /\\/g , "") ; if ( ! Z && I . attrMap[ W ] ) { X [ 1 ] = I . attrMap[ W ] } if ( X [ 2 ] === "~ = ") { X [ 4 ] = " "+ X [ 4 ] + " "} return X } , PSEUDO : function ( X , U , V , T , Y ) { if ( X [ 1 ] === "not") { if ( X [ 3 ] . match ( R ) . length> 1 || /^\w/ . test ( X [ 3 ] ) ) { X [ 3 ] = F ( X [ 3 ] , null , null , U ) } else { var W = F . filter ( X [ 3 ] , U , V , true ^ Y ) ; if ( ! V ) { T . push. apply ( T , W ) } return false } } else { if ( I . match. POS . test ( X [ 0 ] ) || I . match. CHILD . test ( X [ 0 ] ) ) { return true } } return X } , POS : function ( T ) { T . unshift ( true ) ; return T } } , filters: { enabled: function ( T ) { return T . disabled=== false && T . type!== "hidden"} , disabled: function ( T ) { return T . disabled=== true } , checked: function ( T ) { return T . checked=== true } , selected: function ( T ) { T . parentNode. selectedIndex; return T . selected=== true } , parent: function ( T ) { return ! ! T . firstChild} , empty: function ( T ) { return ! T . firstChild} , has: function ( V , U , T ) { return ! ! F ( T [ 3 ] , V ) . length} , header: function ( T ) { return / h\d/ i. test ( T . nodeName) } , text: function ( T ) { return "text"=== T . type} , radio: function ( T ) { return "radio"=== T . type} , checkbox: function ( T ) { return "checkbox"=== T . type} , file: function ( T ) { return "file"=== T . type} , password: function ( T ) { return "password"=== T . type} , submit: function ( T ) { return "submit"=== T . type} , image: function ( T ) { return "image"=== T . type} , reset: function ( T ) { return "reset"=== T . type} , button: function ( T ) { return "button"=== T . type|| T . nodeName. toUpperCase ( ) === "BUTTON "} , input: function ( T ) { return / input| select| textarea| button/ i. test ( T . nodeName) } } , setFilters: { first: function ( U , T ) { return T === 0 } , last: function ( V , U , T , W ) { return U === W . length- 1 } , even: function ( U , T ) { return T % 2 === 0 } , odd: function ( U , T ) { return T % 2 === 1 } , lt: function ( V , U , T ) { return U < T [ 3 ] - 0 } , gt: function ( V , U , T ) { return U > T [ 3 ] - 0 } , nth: function ( V , U , T ) { return T [ 3 ] - 0 == U } , eq: function ( V , U , T ) { return T [ 3 ] - 0 == U } } , filter: { PSEUDO : function ( Z , V , W , aa) { var U = V [ 1 ] , X = I . filters[ U ] ; if ( X ) { return X ( Z , W , V , aa) } else { if ( U === "contains") { return ( Z . textContent|| Z . innerText|| "") . indexOf ( V [ 3 ] ) >= 0 } else { if ( U === "not") { var Y = V [ 3 ] ; for ( var W = 0 , T = Y . length; W < T ; W ++ ) { if ( Y [ W ] === Z ) { return false } } return true } } } } , CHILD : function ( T , W ) { var Z = W [ 1 ] , U = T ; switch ( Z ) { case "only": case "first": while ( U = U . previousSibling) { if ( U . nodeType=== 1 ) { return false } } if ( Z == "first") { return true } U = T ; case "last": while ( U = U . nextSibling) { if ( U . nodeType=== 1 ) { return false } } return true ; case "nth": var V = W [ 2 ] , ac= W [ 3 ] ; if ( V == 1 && ac== 0 ) { return true } var Y = W [ 0 ] , ab= T . parentNode; if ( ab&& ( ab. sizcache!== Y || ! T . nodeIndex) ) { var X = 0 ; for ( U = ab. firstChild; U ; U = U . nextSibling) { if ( U . nodeType=== 1 ) { U . nodeIndex= ++ X } } ab. sizcache= Y } var aa= T . nodeIndex- ac; if ( V == 0 ) { return aa== 0 } else { return ( aa% V == 0 && aa/ V >= 0 ) } } } , ID : function ( U , T ) { return U . nodeType=== 1 && U . getAttribute ( "id") === T } , TAG : function ( U , T ) { return ( T === "* "&& U . nodeType=== 1 ) || U . nodeName=== T } , CLASS : function ( U , T ) { return ( " "+ ( U . className|| U . getAttribute ( "class ") ) + " ") . indexOf ( T ) > - 1 } , ATTR : function ( Y , W ) { var V = W [ 1 ] , T = I . attrHandle[ V ] ? I . attrHandle[ V ] ( Y ) : Y [ V ] != null ? Y [ V ] : Y . getAttribute ( V ) , Z = T + "", X = W [ 2 ] , U = W [ 4 ] ; return T == null ? X === "!= ": X === "= "? Z === U : X === "*= "? Z . indexOf ( U ) >= 0 : X === "~ = "? ( " "+ Z + " ") . indexOf ( U ) >= 0 : ! U ? Z && T !== false : X === "!= "? Z != U : X === "^= "? Z . indexOf ( U ) === 0 : X === "$= "? Z . substr ( Z . length- U . length) === U : X === "|= "? Z === U || Z . substr ( 0 , U . length+ 1 ) === U + "- ": false } , POS : function ( X , U , V , Y ) { var T = U [ 2 ] , W = I . setFilters[ T ] ; if ( W ) { return W ( X , V , U , Y ) } } } } ; var M = I . match. POS ; for ( var O in I . match) { I . match[ O ] = RegExp ( I . match[ O ] . source+ /(?![^\[]*\])(?![^\(]*\))/ . source) } var E = function ( U , T ) { U = Array. prototype. slice. call ( U ) ; if ( T ) { T . push. apply ( T , U ) ; return T } return U } ; try { Array. prototype. slice. call ( document. documentElement. childNodes) } catch ( N ) { E = function ( X , W ) { var U = W || [ ] ; if ( H . call ( X ) === "[ object Array] ") { Array. prototype. push. apply ( U , X ) } else { if ( typeof X . length=== "number") { for ( var V = 0 , T = X . length; V < T ; V ++ ) { U . push ( X [ V ] ) } } else { for ( var V = 0 ; X [ V ] ; V ++ ) { U . push ( X [ V ] ) } } } return U } } var G ; if ( document. documentElement. compareDocumentPosition) { G = function ( U , T ) { var V = U . compareDocumentPosition ( T ) & 4 ? - 1 : U === T ? 0 : 1 ; if ( V === 0 ) { hasDuplicate= true } return V } } else { if ( "sourceIndex" in document. documentElement) { G = function ( U , T ) { var V = U . sourceIndex- T . sourceIndex; if ( V === 0 ) { hasDuplicate= true } return V } } else { if ( document. createRange) { G = function ( W , U ) { var V = W . ownerDocument. createRange ( ) , T = U . ownerDocument. createRange ( ) ; V . selectNode ( W ) ; V . collapse ( true ) ; T . selectNode ( U ) ; T . collapse ( true ) ; var X = V . compareBoundaryPoints ( Range. START_TO_END , T ) ; if ( X === 0 ) { hasDuplicate= true } return X } } } } ( function ( ) { var U = document. createElement ( "form") , V = "script"+ ( new Date) . getTime ( ) ; U . innerHTML= "< input name= '"+ V + "'/ > ";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!==" undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!==" undefined"&&W.getAttributeNode(" id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!==" undefined"&&Y.getAttributeNode(" id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement(" div");T.appendChild(document.createComment(" "));if(T.getElementsByTagName(" * ").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]===" * "){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML=" < a href= '#' > < / a> ";if(T.firstChild&&typeof T.firstChild.getAttribute!==" undefined"&&T.firstChild.getAttribute(" href")!==" #"){I.attrHandle.href=function(U){return U.getAttribute(" href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement(" div");U.innerHTML=" < p class = 'TEST' > < / p> ";if(U.querySelectorAll&&U.querySelectorAll(" . TEST ").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement(" div");T.innerHTML=" < div class = 'test e' > < / div> < div class = 'test' > < / div> ";if(T.getElementsByClassName(" e").length===0){return}T.lastChild.className=" e";if(T.getElementsByClassName(" e").length===1){return}I.order.splice(1,0," CLASS ");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!==" undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U==" previousSibling"&&!ac;for(var W=0,V=ad.length;WpreviousSibling"&&!ac;for(var W=0,V=ad.length;Wstring"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!==" HTML "||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X=" ",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO," ")}T=I.relative[T]?T+" * ":T;for(var Z=0,U=V.length;Z: "]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=" : not ( "+V+" ) "}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I," events")||o.data(I," events",{}),J=o.data(I," handle")||o.data(I," handle",function(){return typeof o!==" undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(" . ");N=O.shift();H.type=O.slice().sort().join(" . ");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent(" on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K," events"),F,E;if(G){if(H===g||(typeof H===" string"&&H.charAt(0)==" . ")){for(var I in G){this.remove(K,I+(H||" "))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(" . ");O=Q.shift();var N=RegExp(" ( ^ | \\. ) "+Q.slice().sort().join(" . * \\. ")+" ( \\. | $) ");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K," handle"),false)}else{if(K.detachEvent){K.detachEvent(" on"+O,o.data(K," handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K," handle");if(L){L.elem=null}o.removeData(K," events");o.removeData(K," handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I===" object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf(" ! ")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H," handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H," a")&&G==" click"))&&H[" on"+G]&&H[" on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H," a")&&G==" click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(" . ");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp(" ( ^ | \\. ) "+L.slice().sort().join(" . * \\. ")+" ( \\. | $) ");E=(o.data(this," events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:" altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp(" ( ^ | \\. ) "+G[0]+" ( \\. | $) ");o.each((o.data(this," events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:" mouseenter",mouseout:" mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F==" unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F( ^ | \\. ) "+H.type+" ( \\. | $) "),G=true,F=[];o.each(o.data(this," events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem," closest")-o.data(I.elem," closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return[" live",F,E.replace(/\./g," `").replace(/ /g," | ")].join(" . ")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler(" ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener(" DOMContentLoaded",function(){document.removeEventListener(" DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent(" onreadystatechange",function(){if(document.readyState===" complete"){document.detachEvent(" onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll(" left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l," load",o.ready)}o.each((" blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error").split(" , "),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind(" unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement(" script"),K=document.createElement(" div"),J=" script"+(new Date).getTime();K.style.display=" none";K.innerHTML=' / a" style=" color: red; float: left; opacity: .5 ; ">atext ';var H=K.getElementsByTagName(" * "),E=K.getElementsByTagName(" a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName(" tbody").length,objectAll:!!K.getElementsByTagName(" object")[0].getElementsByTagName(" * ").length,htmlSerialize:!!K.getElementsByTagName(" link").length,style:/red/.test(E.getAttribute(" style")),hrefNormalized:E.getAttribute(" href")===" / a",opacity:E.style.opacity===" 0.5 ",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type=" text/ javascript";try{G.appendChild(document.createTextNode(" window. "+J+" = 1 ; "))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent(" onclick",function(){o.support.noCloneEvent=false;K.detachEvent(" onclick",arguments.callee)});K.cloneNode(true).fireEvent(" onclick")}o(function(){var L=document.createElement(" div");L.style.width=L.style.paddingLeft=" 1 px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display=" none"})})();var w=o.support.cssFloat?" cssFloat":" styleFloat";o.props={" for ":" htmlFor"," class ":" className"," float":w,cssFloat:w,styleFloat:w,readonly:" readOnly",maxlength:" maxLength",cellspacing:" cellSpacing",rowspan:" rowSpan",tabindex:" tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!==" string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H=" GET ";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J===" object"){J=o.param(J);H=" POST "}}}var F=this;o.ajax({url:G,type:H,dataType:" html",data:J,complete:function(M,L){if(L==" success"||L==" notmodified"){F.html(E?o(" < div/ > ").append(M.responseText.replace(/
你可能感兴趣的:(js)
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
EasyPlayer播放器系列开发计划2025
xiejiashu
EasyPlayer EasyPlayer EasyPlayer播放器 RTSP播放器 js播放器 Web播放器
EasyPlayer系列产品发展至今,已经超过10年,从最早的EasyPlayerRTSP播放器,到如今维护的3条线:EasyPlayer-RTSP播放器:Windows、Android、iOS;EasyPlayerPro播放器:Windows、Android、iOS;EasyPlayer.js播放器:H5;这3个播放器各有各的应用场景,用户量也是巨大,像RTSP版本的播放器,到今天依然还有很多低
js操作样式
郝加升
DOM样式属性和方法:指定的元素,它的style有这么几个属性和方法:cssText:通过这个属性可以访问到元素的特性style设置的属性,并且可以直接赋值设置。removeProperty(属性名称):从样式中删除给定属性。setProperty(属性名称,值,权重):可以通过这个方法设置给定样式的同时设置其权重,可以传入”important”或者一个空字符串。获取计算后样式:window.ge
深入理解 Tomcat Wrapper 原理
北漂老男人
Tomcat tomcat java
深入理解TomcatWrapper原理一、引言在Tomcat的分层容器架构中,Wrapper作为最底层的容器,专门负责管理单个Servlet的生命周期及请求分发。每一个Servlet(包括JSP、Filter等)都对应一个Wrapper。Wrapper是Servlet规范与Tomcat容器实现之间的桥梁,直接关系到请求的分发效率、Servlet的加载与重用、安全隔离等。本文将系统剖析Wrapper
人工智能应用研究快讯 2021-11-30
峰谷皆平
[HTML]ArtificialIntelligenceforSkinCancerDetection:ScopingReviewATakiddin,JSchneider,YYang,AAbd-Alrazaq...JournalofMedicalInternet...,2021ABSTACT:Background:Skincanceristhemostcommoncancertypeaffectin
前端面试每日 3+1 —— 第39天
浪子神剑
今天的面试题(2019.05.25)——第39天[html]title与h1、b与strong、i与em的区别分别是什么?[css]写出你知道的CSS水平和垂直居中的方法[js]说说你对模块化的理解[软技能]公钥加密和私钥加密是什么?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。前端面试每日3+1题,以面试题来驱动学习,每天进步一点!让努力成为一种习惯,让奋斗成为一种享受!欢迎在Iss
selenium 特殊场景处理
文章目录前言一、windows的弹窗二、内嵌网页frame三、页签切换四、截图五、弹窗六、JS执行总结前言selenium处理web操作师,有很多特殊的情况需要处理,例如弹窗、内嵌网页,页签切换,js执行等,下面介绍一些可能会遇到的特殊场景一、windows的弹窗importwin32com.client'''创建了一个WScript.ShellCOM(ComponentObjectModel)对
大学社团管理系统(11831)
codercode2022
java spring boot spring echarts spring cloud sentinel java-rocketmq
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!
二级域名分发网站源码 商业版全开源
lskelasi
程序源码 二级域名分发源码 二级域名分发网站源码 源码
介绍:快乐二级域名分发-快乐二级域名分发源码主要是二级域名分发网站源码,不懂的不要下载了。本套源码可设置收费使用,有充值接口,域名接口配置自己研究吧网盘下载地址:https://zijiewangpan.com/jsX0JAuRE01图片:
2021-01-19
长孙俊明
curl-H"Content-Type:application/json"-XPUT127.0.0.1:9200/_all/_settings-d'{"index.max_result_window":"5000000"}'
VUE 座位图功能+扩展
NUZGNAW
vue.js javascript 前端
1、通过循环画出页面座位图0"style="display:table;margin:0auto;min-height:472px;position:relative;">{{i.sign}}2、画出右下角的预览图3、编写对应js方法watch:{seatList:{handler(newVal,oldVal){if(this.seatList&&!stringBlank(this.seatLis
为什么学习Web前端一定要掌握JavaScript?
web前端学习指南
为什么学习Web前端一定要掌握JavaScript?在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。
响应式编程实践:Spring Boot WebFlux构建高性能非阻塞服务
fanxbl957
Web spring boot 后端 java
博主介绍:Java、Python、js全栈开发“多面手”,精通多种编程语言和技术,痴迷于人工智能领域。秉持着对技术的热爱与执着,持续探索创新,愿在此分享交流和学习,与大家共进步。全栈开发环境搭建运行攻略:多语言一站式指南(环境搭建+运行+调试+发布+保姆级详解)感兴趣的可以先收藏起来,希望帮助更多的人响应式编程实践:SpringBootWebFlux构建高性能非阻塞服务一、引言在当今数字化时代,互
vue项目
阿什么名字不会重复呢
vue.js 前端 javascript
vue进行配置创建vue项目vuecreateone//one就是项目名字npmielement-ui--Snpmiaxios--savenpmiecharts--save配置main.jsimportVuefrom'vue'importAppfrom'./App.vue'importrouterfrom'./router'importstorefrom'./store'importElement
native.js设置可缩放的webview并隐藏缩放控件
Nanayai
需求明确:webview页面可以手指缩放,并且不要那个原生控件;实现思路:1.使用h5+封装好的方法:设置scalable属性,并在html中设置meta标签:user-scalable=yes或不设置,minimum-scale和maximum-scale需要注意不要都设为1:mui.openWindow({url:"someThing",id:"someThing",styles:{scala
自定义参数解析器HandlerMethodArgumentResolver,重新定义@ResponseBody的请求方式
chanyi
1、解决的问题加了@ResponseBody注解的方法,请求的方式是post的json格式,但如果我们也要通过post的application/x-www-form-urlencoded格式访问此接口。在不改变此接口的情况下。通过修改参数解析器HandlerMethodArgumentResovler来兼容两种请求方法。2、思路根据不同的content-type使用不同参数解析处理器。Conten
python中的 JWT
weixin_34355881
python json php
Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。基
【Python】PyJWT:轻松实现 JSON Web Token (JWT) 网络令牌的生成与验证
@Unity打怪升级
Python python json 网络 开发语言 前端 pip ipython
PyJWT是一个用Python实现的轻量级库,用于处理JSONWebToken(JWT)。JWT是一种安全的方式,用来表示双方之间经过签名的令牌,通常用于认证和授权场景。PyJWT简化了JWT的生成和验证过程,使得开发者能够轻松地在Python项目中集成JWT功能。在这篇博客中,我们将深入介绍PyJWT,展示如何生成、解码和验证JWT令牌,并且会通过代码示例演示如何在实际项目中使用PyJWT进行认
时间组件库Day.js那些事
前端小白花
javascript 开发语言 ecmascript
一、简介1.什么是Day.jsDay.js是一个轻量级,易于使用的JavaScript日期库,提供了强大的日期和时间处理功能,与Moment.js的API设计相似,但具有更高的性能和更小的体积。Day.js官网https://day.js.org/docs/zh-CN/installation/installation2.优势a.特点轻量级:Dayjs的压缩后大小只有2KB左右,远小于Moment
Python 数据可视化神器—Pyecharts
代码输入中...
python echarts 开发语言 数据分析 pycharm
前言Echarts是百度开源的一款数据可视化JS工具,数据可视化类型十分丰富,但是得通过导入js库在JavaWeb项目上运行。作为工作中常用Python的选手,不能不知道这款数据可视化插件的强大。那么,能否在Python中也能用到Echarts的功能呢?寻找中惊喜地发现了pyecharts,只需在python中安装该模块即可使用。安装常用的pip安装包一键安装pyecharts#pyecharts
JavaScript正则表达式去除括号但保留内容与去除括号与内容
Selicens
javascript 正则表达式
项目上碰到一个需求,是取多个递增文件的文件名,类似于test(1).txt、test(2).txt,但是不需要括号,只要test1、test2这种格式,最开始想到的办法就是js里的replace替换,先上一个比较笨但是也能实现效果的例子letname="test(1).txt"letdata=name.split('.')[0].replace('(','').replace(')','')con
如何从模型返回结构化数据
努力学习agent
langchain 人工智能
with_structured_output()方法支持此方法的模型ProviderToolcallingStructuredoutputJSONmodeLocalMultimodalPackageChatAnthropic✅✅❌❌✅langchain-anthropicChatMistralAI✅✅❌❌❌langchain-mistralaiChatFireworks✅✅✅❌❌langchain
[simdjson] 实现不同CPU调度 | 自动硬件适配的抽象
lvy-
# json高速解析lib linux 数据库
第八章:实现不同CPU调度欢迎回来~在前面的章节中,我们已经探索了如何使用simdjson的解析器、填充字符串、文档、值类型、对象与数组,学习了如何处理错误处理,甚至处理文档流。我们已经看到simdjson的速度非常快。这种速度很大程度上源于现代CPU提供的高性能专用指令。但并非所有CPU都相同!在Intel芯片上可用的指令可能在ARM芯片或旧款Intel芯片上不存在。这带来了一个挑战:如何让si
OpenSIPS 邂逅 Kafka:构建高效 VoIP 消息处理架构
c_zyer
opensips SIP 消息队列 kafka opensips voip
使用场景使用步骤引入模块组装&发送数据消费数据故障转移使用场景异步日志处理:将OpenSIPS中的SIP信令日志、通话记录(CDR)等数据发送到Kafka队列中。事件通知与监控:利用OpenSIPS的event_interface模块将SIP事件(如呼叫建立、断开、注册等)推送到KafkaOpenSIPS中事件接口有以下类型:EVENT_DATAGRAM-PublishJSON-RPCnotifi
网络安全第14集
不灭锦鲤
web安全 安全
前言:小迪安全14集,这集重点内容:0、什么是js渗透测试?在javascript中也存在变量和函数,存在可控变量和函数就有可能存在在漏洞,js开发的web应用和php、java开发的区别是,js能看得到的源代码,php看不到,但是风险就是未授权访问、配置信息泄露(加密算法、key秘钥等),源代码看得到,存在更多的url泄露,从而可能会出现未授权访问,从url,前提:web应用可以采用前端语言或后
datax数据抽取csv到mysql
datax数据抽取执行pythondatax.py-rstreamreader-wstreamwriter命令得到job的json模板,而Windows不支持这种语法。二、解决方案cross-env是一个解决跨平台环境变量设置
JS对象三
玉米地里的熊
1.枚举对象中的属性使用for...in语句-语法:for(var变量in对象){}for...in语句对象中有几个属性,循环体就会执行几次每次执行时,会将对象中的一个属性的名字赋值给变量varobj={name:"孙悟空",age:18,gender:"男",address:"花果山"};for(varninobj){console.log("属性名:"+n);console.log("属性值:
【华为OD机试真题】39、 密钥格式化 | 机试真题+思路参考+代码解析(C语言、C++、Java、Py、JS)
KFickle
华为od c语言 c++ javascript java 密钥格式化
文章目录一、题目题目描述输入输出样例1样例2二、代码与思路参考C语言思路C代码C++语言思路C++代码Java语言思路Java代码Python语言思路Python代码JS语言思路JS代码作者:鲨鱼狼臧个人博客首页:鲨鱼狼臧专栏介绍:2023华为OD机试真题,使用C、C++、JS、Java、Python五种语言进行解答,专栏每篇文章都包括真题,思路参考,代码分析,订阅有问题后续可与博主解答问题,欢迎
【华为OD机试真题】186、服务中心选址 | 机试真题+思路参考+代码解析(C++、Java、Py、JS)
KFickle
华为od c++ java 华为OD机试真题 javascript 华为 服务中心选址
文章目录一、题目题目描述输入输出样例1样例2样例3二、代码与思路参考C++语言思路C++代码Java语言思路Java代码Python语言思路Python代码JS语言思路JS代码作者:鲨鱼狼臧个人博客首页:鲨鱼狼臧专栏介绍:持续更新最新的华为OD机试真题,本专栏使用C++、Java、Python、JS语言进行解答,目前已更新到2024的B、C、D卷,每个题目的思路分析都非常详细,题目新增图解思路,问
戴尔笔记本win8系统改装win7系统
sophia天雪
win7 戴尔 改装系统 win8
戴尔win8 系统改装win7 系统详述
第一步:使用U盘制作虚拟光驱:
1)下载安装UltraISO:注册码可以在网上搜索。
2)启动UltraISO,点击“文件”—》“打开”按钮,打开已经准备好的ISO镜像文
BeanUtils.copyProperties使用笔记
bylijinnan
java
BeanUtils.copyProperties VS PropertyUtils.copyProperties
两者最大的区别是:
BeanUtils.copyProperties会进行类型转换,而PropertyUtils.copyProperties不会。
既然进行了类型转换,那BeanUtils.copyProperties的速度比不上PropertyUtils.copyProp
MyEclipse中文乱码问题
0624chenhong
MyEclipse
一、设置新建常见文件的默认编码格式,也就是文件保存的格式。
在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致,即GBK。
在简体中文系统下,ANSI 编码代表 GBK编码;在日文操作系统下,ANSI 编码代表 JIS 编码。
Window-->Preferences-->General -
发送邮件
不懂事的小屁孩
send email
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
动画合集
换个号韩国红果果
html css
动画 指一种样式变为另一种样式 keyframes应当始终定义0 100 过程
1 transition 制作鼠标滑过图片时的放大效果
css
.wrap{
width: 340px;height: 340px;
position: absolute;
top: 30%;
left: 20%;
overflow: hidden;
bor
网络最常见的攻击方式竟然是SQL注入
蓝儿唯美
sql注入
NTT研究表明,尽管SQL注入(SQLi)型攻击记录详尽且为人熟知,但目前网络应用程序仍然是SQLi攻击的重灾区。
信息安全和风险管理公司NTTCom Security发布的《2015全球智能威胁风险报告》表明,目前黑客攻击网络应用程序方式中最流行的,要数SQLi攻击。报告对去年发生的60亿攻击 行为进行分析,指出SQLi攻击是最常见的网络应用程序攻击方式。全球网络应用程序攻击中,SQLi攻击占
java笔记2
a-john
java
类的封装:
1,java中,对象就是一个封装体。封装是把对象的属性和服务结合成一个独立的的单位。并尽可能隐藏对象的内部细节(尤其是私有数据)
2,目的:使对象以外的部分不能随意存取对象的内部数据(如属性),从而使软件错误能够局部化,减少差错和排错的难度。
3,简单来说,“隐藏属性、方法或实现细节的过程”称为——封装。
4,封装的特性:
4.1设置
[Andengine]Error:can't creat bitmap form path “gfx/xxx.xxx”
aijuans
学习Android遇到的错误
最开始遇到这个错误是很早以前了,以前也没注意,只当是一个不理解的bug,因为所有的texture,textureregion都没有问题,但是就是提示错误。
昨天和美工要图片,本来是要背景透明的png格式,可是她却给了我一个jpg的。说明了之后她说没法改,因为没有png这个保存选项。
我就看了一下,和她要了psd的文件,还好我有一点
自己写的一个繁体到简体的转换程序
asialee
java 转换 繁体 filter 简体
今天调研一个任务,基于java的filter实现繁体到简体的转换,于是写了一个demo,给各位博友奉上,欢迎批评指正。
实现的思路是重载request的调取参数的几个方法,然后做下转换。
android意图和意图监听器技术
百合不是茶
android 显示意图 隐式意图 意图监听器
Intent是在activity之间传递数据;Intent的传递分为显示传递和隐式传递
显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图;不指明调用的名称,根据设
spring3中新增的@value注解
bijian1013
java spring @Value
在spring 3.0中,可以通过使用@value,对一些如xxx.properties文件中的文件,进行键值对的注入,例子如下:
1.首先在applicationContext.xml中加入:
<beans xmlns="http://www.springframework.
Jboss启用CXF日志
sunjing
log jboss CXF
1. 在standalone.xml配置文件中添加system-properties:
<system-properties> <property name="org.apache.cxf.logging.enabled" value=&
【Hadoop三】Centos7_x86_64部署Hadoop集群之编译Hadoop源代码
bit1129
centos
编译必需的软件
Firebugs3.0.0
Maven3.2.3
Ant
JDK1.7.0_67
protobuf-2.5.0
Hadoop 2.5.2源码包
Firebugs3.0.0
http://sourceforge.jp/projects/sfnet_findbug
struts2验证框架的使用和扩展
白糖_
框架 xml bean struts 正则表达式
struts2能够对前台提交的表单数据进行输入有效性校验,通常有两种方式:
1、在Action类中通过validatexx方法验证,这种方式很简单,在此不再赘述;
2、通过编写xx-validation.xml文件执行表单验证,当用户提交表单请求后,struts会优先执行xml文件,如果校验不通过是不会让请求访问指定action的。
本文介绍一下struts2通过xml文件进行校验的方法并说
记录-感悟
braveCS
感悟
再翻翻以前写的感悟,有时会发现自己很幼稚,也会让自己找回初心。
2015-1-11 1. 能在工作之余学习感兴趣的东西已经很幸福了;
2. 要改变自己,不能这样一直在原来区域,要突破安全区舒适区,才能提高自己,往好的方面发展;
3. 多反省多思考;要会用工具,而不是变成工具的奴隶;
4. 一天内集中一个定长时间段看最新资讯和偏流式博
编程之美-数组中最长递增子序列
bylijinnan
编程之美
import java.util.Arrays;
import java.util.Random;
public class LongestAccendingSubSequence {
/**
* 编程之美 数组中最长递增子序列
* 书上的解法容易理解
* 另一方法书上没有提到的是,可以将数组排序(由小到大)得到新的数组,
* 然后求排序后的数组与原数
读书笔记5
chengxuyuancsdn
重复提交 struts2的token验证
1、重复提交
2、struts2的token验证
3、用response返回xml时的注意
1、重复提交
(1)应用场景
(1-1)点击提交按钮两次。
(1-2)使用浏览器后退按钮重复之前的操作,导致重复提交表单。
(1-3)刷新页面
(1-4)使用浏览器历史记录重复提交表单。
(1-5)浏览器重复的 HTTP 请求。
(2)解决方法
(2-1)禁掉提交按钮
(2-2)
[时空与探索]全球联合进行第二次费城实验的可能性
comsci
二次世界大战前后,由爱因斯坦参加的一次在海军舰艇上进行的物理学实验 -费城实验
至今给我们大家留下很多迷团.....
关于费城实验的详细过程,大家可以在网络上搜索一下,我这里就不详细描述了
在这里,我的意思是,现在
easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
daizj
oracle ORA-12154
用easy connect连接出现“tns无法解析指定的连接标示符”的错误,如下:
C:\Users\Administrator>sqlplus username/
[email protected] :1521/orcl
SQL*Plus: Release 10.2.0.1.0 – Production on 星期一 5月 21 18:16:20 2012
Copyright (c) 198
简单排序:归并排序
dieslrae
归并排序
public void mergeSort(int[] array){
int temp = array.length/2;
if(temp == 0){
return;
}
int[] a = new int[temp];
int
C语言中字符串的\0和空格
dcj3sjt126com
c
\0 为字符串结束符,比如说:
abcd (空格)cdefg;
存入数组时,空格作为一个字符占有一个字节的空间,我们
解决Composer国内速度慢的办法
dcj3sjt126com
Composer
用法:
有两种方式启用本镜像服务:
1 将以下配置信息添加到 Composer 的配置文件 config.json 中(系统全局配置)。见“例1”
2 将以下配置信息添加到你的项目的 composer.json 文件中(针对单个项目配置)。见“例2”
为了避免安装包的时候都要执行两次查询,切记要添加禁用 packagist 的设置,如下 1 2 3 4 5
高效可伸缩的结果缓存
shuizhaosi888
高效可伸缩的结果缓存
/**
* 要执行的算法,返回结果v
*/
public interface Computable<A, V> {
public V comput(final A arg);
}
/**
* 用于缓存数据
*/
public class Memoizer<A, V> implements Computable<A,
三点定位的算法
haoningabc
c 算法
三点定位,
已知a,b,c三个顶点的x,y坐标
和三个点都z坐标的距离,la,lb,lc
求z点的坐标
原理就是围绕a,b,c 三个点画圆,三个圆焦点的部分就是所求
但是,由于三个点的距离可能不准,不一定会有结果,
所以是三个圆环的焦点,环的宽度开始为0,没有取到则加1
运行
gcc -lm test.c
test.c代码如下
#include "stdi
epoll使用详解
jimmee
c linux 服务端编程 epoll
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linu
Hibernate对Enum的映射的基本使用方法
linzx0212
enum Hibernate
枚举
/**
* 性别枚举
*/
public enum Gender {
MALE(0), FEMALE(1), OTHER(2);
private Gender(int i) {
this.i = i;
}
private int i;
public int getI
第10章 高级事件(下)
onestopweb
事件
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
孙子兵法
roadrunners
孙子 兵法
始计第一
孙子曰:
兵者,国之大事,死生之地,存亡之道,不可不察也。
故经之以五事,校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五
曰法。道者,令民于上同意,可与之死,可与之生,而不危也;天者,阴阳、寒暑
、时制也;地者,远近、险易、广狭、死生也;将者,智、信、仁、勇、严也;法
者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知之者不胜。故校
之以计,而索其情,曰
MySQL双向复制
tomcat_oracle
mysql
本文包括:
主机配置
从机配置
建立主-从复制
建立双向复制
背景
按照以下简单的步骤:
参考一下:
在机器A配置主机(192.168.1.30)
在机器B配置从机(192.168.1.29)
我们可以使用下面的步骤来实现这一点
步骤1:机器A设置主机
在主机中打开配置文件 ,
zoj 3822 Domination(dp)
阿尔萨斯
Mina
题目链接:zoj 3822 Domination
题目大意:给定一个N∗M的棋盘,每次任选一个位置放置一枚棋子,直到每行每列上都至少有一枚棋子,问放置棋子个数的期望。
解题思路:大白书上概率那一张有一道类似的题目,但是因为时间比较久了,还是稍微想了一下。dp[i][j][k]表示i行j列上均有至少一枚棋子,并且消耗k步的概率(k≤i∗j),因为放置在i+1~n上等价与放在i+1行上,同理