TokenListのまねをしてみる。スタイルシートに利用すると複数の指定や書き換え、トグルできたり便利

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title></title>

<style type="text/css">
  .chkOn { background-color: #ff0; }
  .chkOff { background-color: #fff; }
</style>

<body>
<table>
  <tr class="chkOff">
      <td>1</td>
      <td>東京</td>
      <td><input type="checkbox" name="myvalue" value="1"></td>
  </tr>
  <tr class="chkOff">
      <td>2</td>
      <td>神奈川</td>
      <td><input type="checkbox" name="myvalue" value="2"></td>
  </tr>
  <tr class="chkOff">
      <td>3</td>
      <td>千葉</td>
      <td><input type="checkbox" name="myvalue" value="3"></td>
  </tr>
</table>
<div id="p" class="ab ef ij">euwuiacbhuibac</div>

<script type="text/javascript">

//@cc_on

var TokenList = (function ( cut, has, join ) {
  return function ( type ) {
 
    return {
 
      'contains':
        function ( e, name ) {
          if( !has( e[ type ], name ) ) {
            var keys = cut( name );
            var cnt = 0, key;
            
            while( key = keys[ cnt++ ] )
              if( has( e[ type ], key ) )
                return false;
          }
          return true;
        },


      'add':
        function ( e, name ) {
          var keys = cut( name );
          var buf = [ ], cnt = 0, key;
          
          while( key = keys[ cnt++ ] )
            has( e[ type ], key ) || buf.push( key );

          e[ type ] += ( e[ type ] ? '\u0020': '' ) + buf.join( '\u0020' );

          return e[ type ];
        },


      'remove':
        function ( e, name ) {
          var keys = cut( e[ type ] );
          var buf = [ ], cnt = 0, key;
          
          while( key = keys[ cnt++ ] )
            has( name, key ) || buf.push( key );

          return e[ type ] = buf.join( '\u0020' );
        },


      'toggle':
        function ( e, name ) {
          var keys = cut( name );
          var aBuf = [ ], dBuf = [ ];
          var key, cnt = 0;

          while( key = keys[ cnt++ ] )
            has( e[ type ], key ) ?
              dBuf.push( key ): aBuf.push( key );

          e[ type ] += ( e[ type ] ? '\u0020': '' ) + aBuf.join( '\u0020' );

          dBuf.length && this.remove( e, dBuf.join( '\u0020' ) );

          return e[ type ];
        },


      'length':
        function ( e ) {
          return cut( e[ type ] ).length;
        },


      'item':
        function ( e, num ) {
          var a = cut( e[ type ] ) || [ ];
          return 'undefined' === typeof num ? a: a[ num ];
        }
    };
  };
})(
    function (s) { return ('' + s).split( /\u0020+/ ); },
    function (s, n) { return -1 < ( '\u0020' + s +'\u0020' ).indexOf( '\u0020' + n + '\u0020' ); },
    function (a) { return a.join( '\u0020' ); }
  );


var eventHandler = (function ( CSS, get ) {
  return function ( evt ) {
    var e = evt./*@if(1) srcElement @else@*/ target /*@end@*/;
    var p;
    if( e.name == 'myvalue' ) {
      p = get( e, 'nodeName', 'TR' );
      if( p ) CSS.toggle( p, 'chkOn chkOff' );
    }
  };
})(
  TokenList( 'className' ),

  function ( n, t, v ) {
    return n ? (v == n[t]) ? n: arguments.callee( n.parentNode, t, v): null;
  }
);

document./*@if( @_jscript )
  attachEvent( 'on' + @else@*/
  addEventListener( /*@end@*/ 'click', eventHandler, false );

</script>