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! |
---|
5 | |
---|
6 | $.defineTag = function( tag ) { |
---|
7 | $[tag.toUpperCase()] = function() { |
---|
8 | return $._createNode( tag, arguments ); |
---|
9 | } |
---|
10 | }; |
---|
11 | |
---|
12 | (function() { |
---|
13 | var tags = [ |
---|
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] ); |
---|
21 | } |
---|
22 | })(); |
---|
23 | |
---|
24 | $.NBSP = '\u00a0'; |
---|
25 | |
---|
26 | $._createNode = function( tag, args ) { |
---|
27 | var fix = { 'class':'className', 'Class':'className' }; |
---|
28 | var e; |
---|
29 | try { |
---|
30 | var attrs = args[0] || {}; |
---|
31 | e = document.createElement( tag ); |
---|
32 | for( var attr in attrs ) { |
---|
33 | var a = fix[attr] || attr; |
---|
34 | e[a] = attrs[attr]; |
---|
35 | } |
---|
36 | for( var i = 1; i < args.length; i++ ) { |
---|
37 | var arg = args[i]; |
---|
38 | if( arg == null ) continue; |
---|
39 | if( arg.constructor != Array ) append( arg ); |
---|
40 | else for( var j = 0; j < arg.length; j++ ) |
---|
41 | append( arg[j] ); |
---|
42 | } |
---|
43 | } |
---|
44 | catch( ex ) { |
---|
45 | alert( 'Cannot create <' + tag + '> element:\n' + |
---|
46 | args.toSource() + '\n' + args ); |
---|
47 | e = null; |
---|
48 | } |
---|
49 | |
---|
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 ); |
---|
56 | } |
---|
57 | e.appendChild( arg ); |
---|
58 | } |
---|
59 | |
---|
60 | return e; |
---|
61 | }; |
---|