var _jQuery = window.jQuery;
var jQuery = window.jQuery = function( selector, context ) {
- // If the context is a namespace object, return a new object
- return this instanceof jQuery ?
- this.init( selector, context ) :
- new jQuery( selector, context );
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.prototype.init( selector, context );
};
// Map over the $ in case of overwrite
append: function() {
return this.domManip(arguments, true, false, function(elem){
- this.appendChild( elem );
+ if (this.nodeType == 1)
+ this.appendChild( elem );
});
},
prepend: function() {
return this.domManip(arguments, true, true, function(elem){
- this.insertBefore( elem, this.firstChild );
+ if (this.nodeType == 1)
+ this.insertBefore( elem, this.firstChild );
});
},
clone: function( events ) {
// Do the clone
var ret = this.map(function(){
- return this.outerHTML ?
- jQuery( this.outerHTML )[0] :
- this.cloneNode( true );
+ if ( jQuery.browser.msie ) {
+ // IE copies events bound via attachEvent when
+ // using cloneNode. Calling detachEvent on the
+ // clone will also remove the events from the orignal
+ // In order to get around this, we use innerHTML.
+ // Unfortunately, this means some modifications to
+ // attributes in IE that are actually only stored
+ // as properties will not be copied (such as the
+ // the name attribute on an input).
+ var clone = this.cloneNode(true),
+ container = document.createElement("div"),
+ container2 = document.createElement("div");
+ container.appendChild(clone);
+ container2.innerHTML = container.innerHTML;
+ return container2.firstChild;
+ } else
+ return this.cloneNode(true);
});
// Need to set the expando to null on the cloned set if it exists
},
add: function( selector ) {
- return this.pushStack( jQuery.merge(
+ return !selector ? this : this.pushStack( jQuery.merge(
this.get(),
selector.constructor == String ?
jQuery( selector ).get() :
} else
return this.each(function(){
+ if ( this.nodeType != 1 )
+ return;
+
if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
this.checked = (jQuery.inArray(this.value, value) >= 0 ||
jQuery.inArray(this.name, value) >= 0);
this.cloneNode( true ) :
this;
+ // execute all scripts after the elements have been injected
if ( jQuery.nodeName( elem, "script" ) ) {
-
- // If scripts are waiting to be executed, wait on this script as well
- if ( scripts.length )
- scripts = scripts.add( elem );
-
- // If nothing is waiting to be executed, run immediately
- else
- evalScript( 0, elem );
-
+ scripts = scripts.add( elem );
} else {
// Remove any inner scripts for later evaluation
if ( elem.nodeType == 1 )
}
};
+// Give the init function the jQuery prototype for later instantiation
+jQuery.prototype.init.prototype = jQuery.prototype;
+
function evalScript( i, elem ) {
if ( elem.src )
jQuery.ajax({
// internal only, use addClass("class")
add: function( elem, classNames ) {
jQuery.each((classNames || "").split(/\s+/), function(i, className){
- if ( !jQuery.className.has( elem.className, className ) )
+ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
elem.className += (elem.className ? " " : "") + className;
});
},
// internal only, use removeClass("class")
remove: function( elem, classNames ) {
- elem.className = classNames != undefined ?
- jQuery.grep(elem.className.split(/\s+/), function(className){
- return !jQuery.className.has( classNames, className );
- }).join(" ") :
- "";
+ if (elem.nodeType == 1)
+ elem.className = classNames != undefined ?
+ jQuery.grep(elem.className.split(/\s+/), function(className){
+ return !jQuery.className.has( classNames, className );
+ }).join(" ") :
+ "";
},
// internal only, use is(".class")
},
attr: function( elem, name, value ) {
+ // don't set attributes on text and comment nodes
+ if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
+ return undefined;
+
var fix = jQuery.isXMLDoc( elem ) ?
{} :
jQuery.props;
jQuery.each({
removeAttr: function( name ) {
jQuery.attr( this, name, "" );
- this.removeAttribute( name );
+ if (this.nodeType == 1)
+ this.removeAttribute( name );
},
addClass: function( classNames ) {