append: function() {
var clone = this.size() > 1;
var a = $.clean(arguments);
- return this.each(function(){
+ return this.domManip(function(){
for ( var i = 0; i < a.length; i++ ) {
this.appendChild( clone ? a[i].cloneNode(true) : a[i] );
}
prepend: function() {
var clone = this.size() > 1;
var a = $.clean(arguments);
- return this.each(function(){
+ return this.domManip(function(){
for ( var i = a.length - 1; i >= 0; i-- ) {
this.insertBefore( clone ? a[i].cloneNode(true) : a[i], this.firstChild );
}
var r = [];
for ( var i = 0; i < a.length; i++ ) {
if ( a[i].constructor == String ) {
- if ( a[i].indexOf("<tr") == 0 ) {
+
+ if ( !a[i].indexOf("<tr") ) {
var tr = true;
a[i] = "<table>" + a[i] + "</table>";
+ } else if ( !a[i].indexOf("<td") || !a[i].indexOf("<th") ) {
+ var td = true;
+ a[i] = "<table><tbody><tr>" + a[i] + "</tr></tbody></table>";
}
+
var div = document.createElement("div");
div.innerHTML = a[i];
- if ( tr ) {
+
+ if ( tr || td ) {
div = div.firstChild.firstChild;
+ if ( td ) {
+ div = div.firstChild;
+ }
}
+
for ( var j = 0; j < div.childNodes.length; j++ ) {
r[r.length] = div.childNodes[j];
}
- } else if ( a[i].length ) {
+ } else if ( a[i].length && !a[i].nodeType ) {
for ( var k = 0; k < a[i].length; k++ ) {
r[r.length] = a[i][k];
}
return r;
};
+$.fn = {};
+
+/**
+ * A wrapper function for each() to be used by append and prepend.
+ * Handles cases where you're trying to modify the inner contents of
+ * a table, when you actually need to work with the tbody.
+ */
+$.fn.domManip = function(fn){
+ return this.each(function(){
+ var obj = this;
+
+ if ( this.nodeName == 'TABLE' ) {
+ if ( !this.firstChild ) {
+ this.appendChild( document.createElement("tbody") );
+ }
+ obj = this.firstChild;
+ }
+
+ $.apply( obj, fn );
+ });
+};
+
$.g = {
'': "m[2] == '*' || a.nodeName.toUpperCase() == m[2].toUpperCase()",
'#': "a.getAttribute('id') && a.getAttribute('id').nodeValue == m[2]",
disabled: "a.disabled",
checked: "a.checked"
},
- // TODO: Write getAttribute helper
".": "$.hasWord(a,m[2])",
"@": {
"=": "$.attr(a,m[3]) == m[4]",
"[": "$.Select(m[2],a).length > 0"
};
-$.fn = {};
-
$.Select = function( t, context ) {
context = context || $.context || document;
if ( t.constructor != String ) {
'for': 'htmlFor',
'text': 'cssText',
'class': 'className',
- 'float': 'cssFloat',
- 'style': 'cssText'
+ 'float': 'cssFloat'
};
a = (fix[a] && fix[a].replace && fix[a]) || a;
var r = new RegExp("-([a-z])","ig");
a = a.replace(r,function(z,b){return b.toUpperCase();});
if ( typeof v != 'undefined' ) {
o[a] = v;
- if ( o.setAttribute ) {
+ if ( o.setAttribute && a != 'disabled' ) {
o.setAttribute(a,v);
}
}
}
while ( t.length > 0 && t.match(/^[:\\.#\\[a-zA-Z\\*]/) ) {
- var re = new RegExp( "^\\[ *@([a-z0-9\\(\\)_-]+) *([~!\\|\\*$^=]*) *'?\"?([^'\"]*)'?\"? *\\]", "i" );
+ var re = new RegExp( "^\\[ *@([a-z0-9\\*\\(\\)_-]+) *([~!\\|\\*$^=]*) *'?\"?([^'\"]*)'?\"? *\\]", "i" );
var m = re.exec(t);
if ( m !== null ) {