1 // DOM element creator for jQuery and Prototype by Michael Geary
2 // http://mg.to/topics/programming/javascript/jquery
3 // Inspired by MochiKit.DOM by Bob Ippolito
4 // Free beer and free speech. Enjoy!
6 $.defineTag = function( tag ) {
7 $[tag.toUpperCase()] = function() {
8 return $._createNode( tag, arguments );
14 'a', 'br', 'button', 'canvas', 'div', 'fieldset', 'form',
15 'h1', 'h2', 'h3', 'hr', 'img', 'input', 'label', 'legend',
16 'li', 'ol', 'optgroup', 'option', 'p', 'pre', 'select',
17 'span', 'strong', 'table', 'tbody', 'td', 'textarea',
18 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul' ];
19 for( var i = tags.length - 1; i >= 0; i-- ) {
20 $.defineTag( tags[i] );
26 $._createNode = function( tag, args ) {
27 var fix = { 'class':'className', 'Class':'className' };
30 var attrs = args[0] || {};
31 e = document.createElement( tag );
32 for( var attr in attrs ) {
33 var a = fix[attr] || attr;
36 for( var i = 1; i < args.length; i++ ) {
38 if( arg == null ) continue;
39 if( arg.constructor != Array ) append( arg );
40 else for( var j = 0; j < arg.length; j++ )
45 alert( 'Cannot create <' + tag + '> element:\n' +
46 args.toSource() + '\n' + args );
50 function append( arg ) {
51 if( arg == null ) return;
52 var c = arg.constructor;
53 switch( typeof arg ) {
54 case 'number': arg = '' + arg; // fall through
55 case 'string': arg = document.createTextNode( arg );