もう古いものは・・・
今日から
<!DOCTYPE html>
前方一致で拾えた〜!
document.querySelectorAll( 'form > input[name^="chk"]' );
しかし、尚且つ checkbox が指定できない?!
document.querySelectorAll( 'form > input[name^="chk" && [type="checkbox"]' );
だがこれで、できた!
document.querySelectorAll( 'form > input[name^="chk"][type="checkbox"]' );
あっぷしてみた!これってスクリプトバージョン指定だったか?(汗)
<!DOCTYPE html> <title></title> <body> <form action="#"> <p> <select name="myselect" onchange="fuga.call( this, event )"> <option value="1111111111" selected>全てにチェック</option> <option value="0000000000">全てチェック解除</option> <option value="1010101010">奇数だけチェック</option> <option value="0101010101">偶数だけチェック</option> <option value="1000010100">1、6、8番だけチェック</option> <option value="0001111111">3番以降全てチェック</option> </select> </p> <p id="babu"> <input type="checkbox" value="1" name="chk01" checked>1番<br> <input type="checkbox" value="1" name="chk02" checked>2番<br> <input type="checkbox" value="1" name="chk03" checked>3番<br> <input type="checkbox" value="1" name="chk04" checked>4番<br> <input type="checkbox" value="1" name="chk05" checked>5番<br> <input type="checkbox" value="1" name="chk06" checked>6番<br> <input type="checkbox" value="1" name="chk07" checked>7番<br> <input type="checkbox" value="1" name="chk08" checked>8番<br> <input type="checkbox" value="1" name="chk09" checked>9番<br> <input type="checkbox" value="1" name="chk10" checked>10番 </p> </form> <script type="text/javascript"> var hoge = function ( es ) { return function ( ) { var vs = this.value.split( '' ); if( Array.prototype.forEach ) { vs.forEach( function ( e, i ) { if( 'checked' in es[i] ) es[i].checked = !!+e }); } else { var i = vs.length; while( i-- ) if( 'checked' in es[i] ) // @_jscript_version >= 5.5 es[ i ].checked = !!+vs[ i ]; } }; }; var fuga = hoge( document.getElementById( 'babu' ).getElementsByTagName( 'input' ) ); </script>
第2案
<!DOCTYPE html> <title></title> <body> <form action="#"> <select name="myselect" onchange="fuga.call( this, event )"> <option value="all" selected>全てにチェック</option> <option value="none">全てチェック解除</option> <option value="odd">奇数だけチェック</option> <option value="even">偶数だけチェック</option> <option value="1,6,8">1、6、8番だけチェック</option> <option value="n+4">3番以降全てチェック</option> </select> <br> <input type="checkbox" value="1" name="chk01" checked>1番<br> <input type="checkbox" value="1" name="chk02" checked>2番<br> <input type="checkbox" value="1" name="chk03" checked>3番<br> <input type="checkbox" value="1" name="chk04" checked>4番<br> <input type="checkbox" value="1" name="chk05" checked>5番<br> <input type="checkbox" value="1" name="chk06" checked>6番<br> <input type="checkbox" value="1" name="chk07" checked>7番<br> <input type="checkbox" value="1" name="chk08" checked>8番<br> <input type="checkbox" value="1" name="chk09" checked>9番<br> <input type="checkbox" value="1" name="chk10" checked>10番 </form> <script type="text/javascript"> var hoge = function ( selector ) { var loop = function ( ary, cb ) { Array.prototype.forEach.call( ary, cb ) }; var on = function (e) { e.checked = true }; var off = function (e) { e.checked = false }; return function ( ) { var targets = selector; var member = [ ]; var es; loop( document.querySelectorAll( selector + '[checked]' ), off ); if( /^[0-9, \s]+$/g.test( this.value ) && ( member = this.value.split(/[\s,]/g) ) ) { es = document.querySelectorAll( selector ); loop( member.map( function (n) { return es[ n - 1 ] } ), on ); } else { switch( this.value ) { case 'all' : break; case 'none' : targets = null; break; default : targets += ':nth-of-type(' + this.value + ')'; } targets && loop( document.querySelectorAll( targets ), on ); } }; }; var fuga = hoge( 'form > input[name^="chk"][type="checkbox"]' ); </script>
- 不要なクロージャを作りまくっては意味がない
昨日はさっぱり意味がわかりませんでした。
<script type="application/javascript;version=1.8"> var hoge = (function ( toUpper, toLower ) function( ary, flag ) ary.map( flag ? toUpper: toLower ))( (function ( up ) function( a ) a.replace( /-([a-z])/g, up ))( function ( a, b ) b.toUpperCase()), (function ( low ) function ( a ) a.replace(/[A-Z]/g, low ))( function ( a ) '-' + a.toLowerCase())); alert( [hoge( [ 'aB', 'bC' ], false ), hoge( [ 'a-b', 'b-c' ], true ) ] ); </script>