return access( this, name, value, true, jQuery.attr );
},
+ removeAttr: function( name, fn ) {
+ return this.each(function(){
+ jQuery.attr( this, name, "" );
+ if ( this.nodeType === 1 ) {
+ this.removeAttribute( name );
+ }
+ });
+ },
+
addClass: function( value ) {
if ( jQuery.isFunction(value) ) {
- return this.each(function() {
- jQuery(this).addClass( value.call(this) );
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.addClass( value.call(this, i, self.attr("class")) );
});
}
removeClass: function( value ) {
if ( jQuery.isFunction(value) ) {
- return this.each(function() {
- jQuery(this).removeClass( value.call(this) );
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.removeClass( value.call(this, i, self.attr("class")) );
});
}
return this;
},
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value, isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className, i = 0, self = jQuery(this),
+ state = stateVal,
+ classNames = value.split( rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space seperated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery.data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
+ }
+ });
+ },
+
hasClass: function( selector ) {
var className = " " + selector + " ";
for ( var i = 0, l = this.length; i < l; i++ ) {
return undefined;
}
- // Typecast once if the value is a number
- if ( typeof value === "number" ) {
- value += "";
- }
+ var isFunction = jQuery.isFunction(value);
- var val = value;
+ return this.each(function(i) {
+ var self = jQuery(this), val = value;
- return this.each(function() {
- if ( jQuery.isFunction(value) ) {
- val = value.call(this);
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
- // Typecast each time if the value is a Function and the appended
- // value is therefore different each time.
- if ( typeof val === "number" ) {
- val += "";
- }
+ if ( isFunction ) {
+ val = value.call(this, i, self.val());
}
- if ( this.nodeType !== 1 ) {
- return;
+ // Typecast each time if the value is a Function and the appended
+ // value is therefore different each time.
+ if ( typeof val === "number" ) {
+ val += "";
}
if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
- this.checked = jQuery.inArray( jQuery(this).val(), val ) >= 0;
+ this.checked = jQuery.inArray( self.val(), val ) >= 0;
} else if ( jQuery.nodeName( this, "select" ) ) {
var values = jQuery.makeArray(val);
}
});
-jQuery.each({
- removeAttr: function( name ) {
- jQuery.attr( this, name, "" );
- if ( this.nodeType === 1 ) {
- this.removeAttribute( name );
- }
- },
-
- toggleClass: function( classNames, state ) {
- var type = typeof classNames;
-
- if ( type === "string" ) {
- // toggle individual class names
- var isBool = typeof state === "boolean", className, i = 0,
- classNames = classNames.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !jQuery(this).hasClass( className );
- jQuery(this)[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery.data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || classNames === false ? "" : jQuery.data( this, "__className__" ) || "";
- }
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( val, state ) {
- if ( jQuery.isFunction( val ) ) {
- return this.each(function() {
- jQuery(this)[ name ]( val.call(this), state );
- });
- }
-
- return this.each( fn, arguments );
- };
-});
-
jQuery.extend({
attrFn: {
val: true,
exec = exec && jQuery.isFunction(value);
for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i ) : value, pass );
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
}
return elems;
jQuery.fn.extend({
text: function( text ) {
if ( jQuery.isFunction(text) ) {
- return this.each(function() {
- return jQuery(this).text( text.call(this) );
+ return this.each(function(i) {
+ var self = jQuery(this);
+ return self.text( text.call(this, i, self.text()) );
});
}
wrapAll: function( html ) {
if ( jQuery.isFunction( html ) ) {
- return this.each(function() {
- jQuery(this).wrapAll( html.apply(this, arguments) );
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
});
}
html: function( value ) {
if ( value === undefined ) {
- return this[0] ?
+ return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, "") :
null;
this.empty().append( value );
}
+ } else if ( jQuery.isFunction( value ) ) {
+ this.each(function(i){
+ var self = jQuery(this), old = self.html();
+ self.empty().append(function(){
+ return value.call( this, i, old );
+ });
+ });
+
} else {
this.empty().append( value );
}
var results, first, value = args[0], scripts = [];
if ( jQuery.isFunction(value) ) {
- return this.each(function() {
- args[0] = value.call(this);
- return jQuery(this).domManip( args, table, callback );
+ return this.each(function(i) {
+ var self = jQuery(this);
+ args[0] = value.call(this, i, table ? self.html() : undefined);
+ return self.domManip( args, table, callback );
});
}
}
if ( options ) {
- return this.each(function() {
- jQuery.offset.setOffset( this, options );
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
});
}
}
if ( options ) {
- return this.each(function() {
- jQuery.offset.setOffset( this, options );
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
});
}
return { top: top, left: left };
},
- setOffset: function( elem, options ) {
+ setOffset: function( elem, options, i ) {
// set position first, in-case top/left are set even on static elem
if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {
elem.style.position = "relative";
var curElem = jQuery( elem ),
curOffset = curElem.offset(),
curTop = parseInt( jQuery.curCSS( elem, "top", true ), 10 ) || 0,
- curLeft = parseInt( jQuery.curCSS( elem, "left", true ), 10) || 0,
- props = {
- top: (options.top - curOffset.top) + curTop,
- left: (options.left - curOffset.left) + curLeft
- };
+ curLeft = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ var props = {
+ top: (options.top - curOffset.top) + curTop,
+ left: (options.left - curOffset.left) + curLeft
+ };
if ( "using" in options ) {
options.using.call( elem, props );
equals(element.attr('tabindex'), -1, 'set negative tabindex');
});
+test("removeAttr(String)", function() {
+ expect(1);
+ equals( jQuery('#mark').removeAttr( "class" )[0].className, "", "remove class" );
+});
+
+test("val()", function() {
+ expect(17);
+
+ document.getElementById('text1').value = "bla";
+ equals( jQuery("#text1").val(), "bla", "Check for modified value of input element" );
+
+ reset();
+
+ equals( jQuery("#text1").val(), "Test", "Check for value of input element" );
+ // ticket #1714 this caused a JS error in IE
+ equals( jQuery("#first").val(), "", "Check a paragraph element to see if it has a value" );
+ ok( jQuery([]).val() === undefined, "Check an empty jQuery object will return undefined from val" );
+
+ equals( jQuery('#select2').val(), '3', 'Call val() on a single="single" select' );
+
+ same( jQuery('#select3').val(), ['1', '2'], 'Call val() on a multiple="multiple" select' );
+
+ equals( jQuery('#option3c').val(), '2', 'Call val() on a option element with value' );
+
+ equals( jQuery('#option3a').val(), '', 'Call val() on a option element with empty value' );
+
+ equals( jQuery('#option3e').val(), 'no value', 'Call val() on a option element with no value attribute' );
+
+ equals( jQuery('#option3a').val(), '', 'Call val() on a option element with no value attribute' );
+
+ jQuery('#select3').val("");
+ same( jQuery('#select3').val(), [''], 'Call val() on a multiple="multiple" select' );
+
+ var checks = jQuery("<input type='checkbox' name='test' value='1'/>").appendTo("#form")
+ .add( jQuery("<input type='checkbox' name='test' value='2'/>").appendTo("#form") )
+ .add( jQuery("<input type='checkbox' name='test' value=''/>").appendTo("#form") )
+ .add( jQuery("<input type='checkbox' name='test'/>").appendTo("#form") );
+
+ same( checks.serialize(), "", "Get unchecked values." );
+
+ equals( checks.eq(3).val(), "on", "Make sure a value of 'on' is provided if none is specified." );
+
+ checks.val([ "2" ]);
+ same( checks.serialize(), "test=2", "Get a single checked value." );
+
+ checks.val([ "1", "" ]);
+ same( checks.serialize(), "test=1&test=", "Get multiple checked values." );
+
+ checks.val([ "", "2" ]);
+ same( checks.serialize(), "test=2&test=", "Get multiple checked values." );
+
+ checks.val([ "1", "on" ]);
+ same( checks.serialize(), "test=1&test=on", "Get multiple checked values." );
+
+ checks.remove();
+});
+
+var testVal = function(valueObj) {
+ expect(6);
+
+ jQuery("#text1").val(valueObj( 'test' ));
+ equals( document.getElementById('text1').value, "test", "Check for modified (via val(String)) value of input element" );
+
+ jQuery("#text1").val(valueObj( 67 ));
+ equals( document.getElementById('text1').value, "67", "Check for modified (via val(Number)) value of input element" );
+
+ jQuery("#select1").val(valueObj( "3" ));
+ equals( jQuery("#select1").val(), "3", "Check for modified (via val(String)) value of select element" );
+
+ jQuery("#select1").val(valueObj( 2 ));
+ equals( jQuery("#select1").val(), "2", "Check for modified (via val(Number)) value of select element" );
+
+ jQuery("#select1").append("<option value='4'>four</option>");
+ jQuery("#select1").val(valueObj( 4 ));
+ equals( jQuery("#select1").val(), "4", "Should be possible to set the val() to a newly created option" );
+
+ // using contents will get comments regular, text, and comment nodes
+ var j = jQuery("#nonnodes").contents();
+ j.val(valueObj( "asdf" ));
+ equals( j.val(), "asdf", "Check node,textnode,comment with val()" );
+ j.removeAttr("value");
+}
+
+test("val(String/Number)", function() {
+ testVal(bareObj);
+});
+
+test("val(Function)", function() {
+ testVal(functionReturningObj);
+})
+
+test("val(Function) with incoming value", function() {
+ expect(10);
+
+ var oldVal = jQuery("#text1").val();
+
+ jQuery("#text1").val(function(i, val) {
+ equals( val, oldVal, "Make sure the incoming value is correct." );
+ return "test";
+ });
+
+ equals( document.getElementById('text1').value, "test", "Check for modified (via val(String)) value of input element" );
+
+ oldVal = jQuery("#text1").val();
+
+ jQuery("#text1").val(function(i, val) {
+ equals( val, oldVal, "Make sure the incoming value is correct." );
+ return 67;
+ });
+
+ equals( document.getElementById('text1').value, "67", "Check for modified (via val(Number)) value of input element" );
+
+ oldVal = jQuery("#select1").val();
+
+ jQuery("#select1").val(function(i, val) {
+ equals( val, oldVal, "Make sure the incoming value is correct." );
+ return "3";
+ });
+
+ equals( jQuery("#select1").val(), "3", "Check for modified (via val(String)) value of select element" );
+
+ oldVal = jQuery("#select1").val();
+
+ jQuery("#select1").val(function(i, val) {
+ equals( val, oldVal, "Make sure the incoming value is correct." );
+ return 2;
+ });
+
+ equals( jQuery("#select1").val(), "2", "Check for modified (via val(Number)) value of select element" );
+
+ jQuery("#select1").append("<option value='4'>four</option>");
+
+ oldVal = jQuery("#select1").val();
+
+ jQuery("#select1").val(function(i, val) {
+ equals( val, oldVal, "Make sure the incoming value is correct." );
+ return 4;
+ });
+
+ equals( jQuery("#select1").val(), "4", "Should be possible to set the val() to a newly created option" );
+});
+
var testAddClass = function(valueObj) {
expect(2);
var div = jQuery("div");
testAddClass(functionReturningObj);
});
+test("addClass(Function) with incoming value", function() {
+ expect(39);
+
+ var div = jQuery("div"), old = div.map(function(){
+ return jQuery(this).attr("class");
+ });
+
+ div.addClass(function(i, val) {
+ equals( val, old[i], "Make sure the incoming value is correct." );
+ return "test";
+ });
+
+ var pass = true;
+ for ( var i = 0; i < div.size(); i++ ) {
+ if ( div.get(i).className.indexOf("test") == -1 ) pass = false;
+ }
+ ok( pass, "Add Class" );
+});
+
var testRemoveClass = function(valueObj) {
expect(5);
testRemoveClass(functionReturningObj);
});
+test("removeClass(Function) with incoming value", function() {
+ expect(39);
+
+ var $divs = jQuery('div').addClass("test"), old = $divs.map(function(){
+ return jQuery(this).attr("class");
+ });
+
+ $divs.removeClass(function(i, val) {
+ equals( val, old[i], "Make sure the incoming value is correct." );
+ return "test";
+ });
+
+ ok( !$divs.is('.test'), "Remove Class" );
+
+ reset();
+});
+
var testToggleClass = function(valueObj) {
expect(17);
testToggleClass(functionReturningObj);
});
-var testRemoveAttr = function(valueObj) {
- expect(1);
- equals( jQuery('#mark').removeAttr( valueObj("class") )[0].className, "", "remove class" );
-};
+test("toggleClass(Fucntion[, boolean]) with incoming value", function() {
+ expect(14);
-test("removeAttr(String)", function() {
- testRemoveAttr(bareObj);
-});
+ var e = jQuery("#firstp"), old = e.attr("class");
+ ok( !e.is(".test"), "Assert class not present" );
+
+ e.toggleClass(function(i, val) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ return "test";
+ });
+ ok( e.is(".test"), "Assert class present" );
+
+ old = e.attr("class");
+
+ e.toggleClass(function(i, val) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ return "test";
+ });
+ ok( !e.is(".test"), "Assert class not present" );
+
+ old = e.attr("class");
-test("removeAttr(Function)", function() {
- testRemoveAttr(functionReturningObj);
+ // class name with a boolean
+ e.toggleClass(function(i, val, state) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ equals( state, false, "Make sure that the state is passed in." );
+ return "test";
+ }, false );
+ ok( !e.is(".test"), "Assert class not present" );
+
+ old = e.attr("class");
+
+ e.toggleClass(function(i, val, state) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ equals( state, true, "Make sure that the state is passed in." );
+ return "test";
+ }, true );
+ ok( e.is(".test"), "Assert class present" );
+
+ old = e.attr("class");
+
+ e.toggleClass(function(i, val, state) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ equals( state, false, "Make sure that the state is passed in." );
+ return "test";
+ }, false );
+ ok( !e.is(".test"), "Assert class not present" );
+
+ // Cleanup
+ e.removeClass("test");
+ e.removeData('__className__');
});
test("addClass, removeClass, hasClass", function() {
}
test("css(String, Function)", function() {
- try {
- expect(3);
+ expect(3);
- var sizes = ["10px", "20px", "30px"];
+ var sizes = ["10px", "20px", "30px"];
- jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" +
- "<div class='cssFunction'></div>" +
- "<div class='cssFunction'></div></div>")
- .appendTo("body");
+ jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" +
+ "<div class='cssFunction'></div>" +
+ "<div class='cssFunction'></div></div>")
+ .appendTo("body");
- var index = 0;
+ var index = 0;
- jQuery("#cssFunctionTest div").css("font-size", function() {
- var size = sizes[index];
- index++;
- return size;
- });
+ jQuery("#cssFunctionTest div").css("font-size", function() {
+ var size = sizes[index];
+ index++;
+ return size;
+ });
- index = 0;
+ index = 0;
+
+ jQuery("#cssFunctionTest div").each(function() {
+ var computedSize = jQuery(this).css("font-size")
+ var expectedSize = sizes[index]
+ equals( computedSize, expectedSize, "Div #" + index + " should be " + expectedSize );
+ index++;
+ });
+
+ jQuery("#cssFunctionTest").remove();
+});
+
+test("css(String, Function) with incoming value", function() {
+ expect(3);
- jQuery("#cssFunctionTest div").each(function() {
- var computedSize = jQuery(this).css("font-size")
- var expectedSize = sizes[index]
- equals( computedSize, expectedSize, "Div #" + index + " should be " + expectedSize );
- index++;
- });
+ var sizes = ["10px", "20px", "30px"];
+
+ jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" +
+ "<div class='cssFunction'></div>" +
+ "<div class='cssFunction'></div></div>")
+ .appendTo("body");
+
+ var index = 0;
+
+ jQuery("#cssFunctionTest div").css("font-size", function() {
+ var size = sizes[index];
+ index++;
+ return size;
+ });
- } finally {
- jQuery("#cssFunctionTest").remove();
- }
+ index = 0;
+
+ jQuery("#cssFunctionTest div").css("font-size", function(i, computedSize) {
+ var expectedSize = sizes[index]
+ equals( computedSize, expectedSize, "Div #" + index + " should be " + expectedSize );
+ index++;
+ return computedSize;
+ });
+
+ jQuery("#cssFunctionTest").remove();
});
test("css(Object) where values are Functions", function() {
- try {
- expect(3);
+ expect(3);
- var sizes = ["10px", "20px", "30px"];
+ var sizes = ["10px", "20px", "30px"];
+
+ jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" +
+ "<div class='cssFunction'></div>" +
+ "<div class='cssFunction'></div></div>")
+ .appendTo("body");
+
+ var index = 0;
- jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" +
- "<div class='cssFunction'></div>" +
- "<div class='cssFunction'></div></div>")
- .appendTo("body");
+ jQuery("#cssFunctionTest div").css({fontSize: function() {
+ var size = sizes[index];
+ index++;
+ return size;
+ }});
+
+ index = 0;
+
+ jQuery("#cssFunctionTest div").each(function() {
+ var computedSize = jQuery(this).css("font-size")
+ var expectedSize = sizes[index]
+ equals( computedSize, expectedSize, "Div #" + index + " should be " + expectedSize );
+ index++;
+ });
+
+ jQuery("#cssFunctionTest").remove();
+});
+
+test("css(Object) where values are Functions with incoming values", function() {
+ expect(3);
+
+ var sizes = ["10px", "20px", "30px"];
- var index = 0;
+ jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" +
+ "<div class='cssFunction'></div>" +
+ "<div class='cssFunction'></div></div>")
+ .appendTo("body");
+
+ var index = 0;
- jQuery("#cssFunctionTest div").css({fontSize: function() {
- var size = sizes[index];
- index++;
- return size;
- }});
+ jQuery("#cssFunctionTest div").css({fontSize: function() {
+ var size = sizes[index];
+ index++;
+ return size;
+ }});
- index = 0;
+ index = 0;
- jQuery("#cssFunctionTest div").each(function() {
- var computedSize = jQuery(this).css("font-size")
- var expectedSize = sizes[index]
- equals( computedSize, expectedSize, "Div #" + index + " should be " + expectedSize );
- index++;
- });
+ jQuery("#cssFunctionTest div").css({"font-size": function(i, computedSize) {
+ var expectedSize = sizes[index]
+ equals( computedSize, expectedSize, "Div #" + index + " should be " + expectedSize );
+ index++;
+ return computedSize;
+ }});
- } finally {
- jQuery("#cssFunctionTest").remove();
- }
+ jQuery("#cssFunctionTest").remove();
});
test("jQuery.css(elem, 'height') doesn't clear radio buttons (bug #1095)", function () {
equals( jQuery(document.createTextNode("foo")).text(), "foo", "Text node was retreived from .text()." );
});
+var testText = function(valueObj) {
+ expect(4);
+ var val = valueObj("<div><b>Hello</b> cruel world!</div>");
+ equals( jQuery("#foo").text(val)[0].innerHTML.replace(/>/g, ">"), "<div><b>Hello</b> cruel world!</div>", "Check escaped text" );
+
+ // using contents will get comments regular, text, and comment nodes
+ var j = jQuery("#nonnodes").contents();
+ j.text(valueObj("hi!"));
+ equals( jQuery(j[0]).text(), "hi!", "Check node,textnode,comment with text()" );
+ equals( j[1].nodeValue, " there ", "Check node,textnode,comment with text()" );
+ equals( j[2].nodeType, 8, "Check node,textnode,comment with text()" );
+}
+
+test("text(String)", function() {
+ testText(bareObj)
+});
+
+test("text(Function)", function() {
+ testText(functionReturningObj);
+});
+
+test("text(Function) with incoming value", function() {
+ expect(2);
+
+ var old = "This link has class=\"blog\": Simon Willison's Weblog";
+
+ jQuery('#sap').text(function(i, val) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ return "foobar";
+ });
+
+ equals( jQuery("#sap").text(), "foobar", 'Check for merged text of more then one element.' );
+
+ reset();
+});
+
var testWrap = function(val) {
expect(18);
var defaultText = 'Try them out:'
// testWrapInner(functionReturningObj)
// })
-var testUnwrap = function() {
+test("unwrap()", function() {
expect(9);
jQuery("body").append(' <div id="unwrap" style="display: none;"> <div id="unwrap1"> <span class="unwrap">a</span> <span class="unwrap">b</span> </div> <div id="unwrap2"> <span class="unwrap">c</span> <span class="unwrap">d</span> </div> <div id="unwrap3"> <b><span class="unwrap unwrap3">e</span></b> <b><span class="unwrap unwrap3">f</span></b> </div> </div>');
same( jQuery('body > span.unwrap').get(), abcdef, 'body contains 6 .unwrap child spans' );
jQuery('body > span.unwrap').remove();
-}
-
-test("unwrap()", function() {
- testUnwrap();
});
var testAppend = function(valueObj) {
test("append(Function)", function() {
testAppend(functionReturningObj);
-})
+});
+
+test("append(Function) with incoming value", function() {
+ expect(12);
+
+ var defaultText = 'Try them out:', old = jQuery("#first").html();
+
+ var result = jQuery('#first').append(function(i, val){
+ equals( val, old, "Make sure the incoming value is correct." );
+ return '<b>buga</b>';
+ });
+ equals( result.text(), defaultText + 'buga', 'Check if text appending works' );
+
+ var select = jQuery('#select3');
+ old = select.html();
+
+ equals( select.append(function(i, val){
+ equals( val, old, "Make sure the incoming value is correct." );
+ return '<option value="appendTest">Append Test</option>';
+ }).find('option:last-child').attr('value'), 'appendTest', 'Appending html options to select element');
+
+ reset();
+ var expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:";
+ old = jQuery("#sap").html();
+
+ jQuery('#sap').append(function(i, val){
+ equals( val, old, "Make sure the incoming value is correct." );
+ return document.getElementById('first');
+ });
+ equals( expected, jQuery('#sap').text(), "Check for appending of element" );
+
+ reset();
+ expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
+ old = jQuery("#sap").html();
+
+ jQuery('#sap').append(function(i, val){
+ equals( val, old, "Make sure the incoming value is correct." );
+ return [document.getElementById('first'), document.getElementById('yahoo')];
+ });
+ equals( expected, jQuery('#sap').text(), "Check for appending of array of elements" );
+
+ reset();
+ expected = "This link has class=\"blog\": Simon Willison's WeblogYahooTry them out:";
+ old = jQuery("#sap").html();
+
+ jQuery('#sap').append(function(i, val){
+ equals( val, old, "Make sure the incoming value is correct." );
+ return jQuery("#first, #yahoo");
+ });
+ equals( expected, jQuery('#sap').text(), "Check for appending of jQuery object" );
+
+ reset();
+ old = jQuery("#sap").html();
+
+ jQuery("#sap").append(function(i, val){
+ equals( val, old, "Make sure the incoming value is correct." );
+ return 5;
+ });
+ ok( jQuery("#sap")[0].innerHTML.match( /5$/ ), "Check for appending a number" );
+
+ reset();
+});
test("appendTo(String|Element|Array<Element>|jQuery)", function() {
expect(12);
expected = "YahooTry them out:This link has class=\"blog\": Simon Willison's Weblog";
jQuery('#sap').prepend(val( jQuery("#first, #yahoo") ));
equals( expected, jQuery('#sap').text(), "Check for prepending of jQuery object" );
-}
+};
test("prepend(String|Element|Array<Element>|jQuery)", function() {
testPrepend(bareObj);
test("prepend(Function)", function() {
testPrepend(functionReturningObj);
-})
+});
+
+test("prepend(Function) with incoming value", function() {
+ expect(10);
+
+ var defaultText = 'Try them out:', old = jQuery('#first').html();
+ var result = jQuery('#first').prepend(function(i, val) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ return '<b>buga</b>';
+ });
+ equals( result.text(), 'buga' + defaultText, 'Check if text prepending works' );
+
+ old = jQuery("#select3").html();
+
+ equals( jQuery('#select3').prepend(function(i, val) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ return '<option value="prependTest">Prepend Test</option>';
+ }).find('option:first-child').attr('value'), 'prependTest', 'Prepending html options to select element');
+
+ reset();
+ var expected = "Try them out:This link has class=\"blog\": Simon Willison's Weblog";
+ old = jQuery('#sap').html();
+
+ jQuery('#sap').prepend(function(i, val) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ return document.getElementById('first');
+ });
+
+ equals( expected, jQuery('#sap').text(), "Check for prepending of element" );
+
+ reset();
+ expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog";
+ old = jQuery('#sap').html();
+
+ jQuery('#sap').prepend(function(i, val) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ return [document.getElementById('first'), document.getElementById('yahoo')];
+ });
+
+ equals( expected, jQuery('#sap').text(), "Check for prepending of array of elements" );
+
+ reset();
+ expected = "YahooTry them out:This link has class=\"blog\": Simon Willison's Weblog";
+ old = jQuery('#sap').html();
+
+ jQuery('#sap').prepend(function(i, val) {
+ equals( val, old, "Make sure the incoming value is correct." );
+ return jQuery("#first, #yahoo");
+ });
+
+ equals( expected, jQuery('#sap').text(), "Check for prepending of jQuery object" );
+});
test("prependTo(String|Element|Array<Element>|jQuery)", function() {
expect(6);
});
}
-test("val()", function() {
- expect(17);
-
- document.getElementById('text1').value = "bla";
- equals( jQuery("#text1").val(), "bla", "Check for modified value of input element" );
-
- reset();
-
- equals( jQuery("#text1").val(), "Test", "Check for value of input element" );
- // ticket #1714 this caused a JS error in IE
- equals( jQuery("#first").val(), "", "Check a paragraph element to see if it has a value" );
- ok( jQuery([]).val() === undefined, "Check an empty jQuery object will return undefined from val" );
-
- equals( jQuery('#select2').val(), '3', 'Call val() on a single="single" select' );
-
- same( jQuery('#select3').val(), ['1', '2'], 'Call val() on a multiple="multiple" select' );
-
- equals( jQuery('#option3c').val(), '2', 'Call val() on a option element with value' );
-
- equals( jQuery('#option3a').val(), '', 'Call val() on a option element with empty value' );
-
- equals( jQuery('#option3e').val(), 'no value', 'Call val() on a option element with no value attribute' );
-
- equals( jQuery('#option3a').val(), '', 'Call val() on a option element with no value attribute' );
-
- jQuery('#select3').val("");
- same( jQuery('#select3').val(), [''], 'Call val() on a multiple="multiple" select' );
-
- var checks = jQuery("<input type='checkbox' name='test' value='1'/>").appendTo("#form")
- .add( jQuery("<input type='checkbox' name='test' value='2'/>").appendTo("#form") )
- .add( jQuery("<input type='checkbox' name='test' value=''/>").appendTo("#form") )
- .add( jQuery("<input type='checkbox' name='test'/>").appendTo("#form") );
-
- same( checks.serialize(), "", "Get unchecked values." );
-
- equals( checks.eq(3).val(), "on", "Make sure a value of 'on' is provided if none is specified." );
-
- checks.val([ "2" ]);
- same( checks.serialize(), "test=2", "Get a single checked value." );
-
- checks.val([ "1", "" ]);
- same( checks.serialize(), "test=1&test=", "Get multiple checked values." );
-
- checks.val([ "", "2" ]);
- same( checks.serialize(), "test=2&test=", "Get multiple checked values." );
-
- checks.val([ "1", "on" ]);
- same( checks.serialize(), "test=1&test=on", "Get multiple checked values." );
-
- checks.remove();
-});
-
-var testVal = function(valueObj) {
- expect(6);
-
- jQuery("#text1").val(valueObj( 'test' ));
- equals( document.getElementById('text1').value, "test", "Check for modified (via val(String)) value of input element" );
-
- jQuery("#text1").val(valueObj( 67 ));
- equals( document.getElementById('text1').value, "67", "Check for modified (via val(Number)) value of input element" );
-
- jQuery("#select1").val(valueObj( "3" ));
- equals( jQuery("#select1").val(), "3", "Check for modified (via val(String)) value of select element" );
-
- jQuery("#select1").val(valueObj( 2 ));
- equals( jQuery("#select1").val(), "2", "Check for modified (via val(Number)) value of select element" );
-
- jQuery("#select1").append("<option value='4'>four</option>");
- jQuery("#select1").val(valueObj( 4 ));
- equals( jQuery("#select1").val(), "4", "Should be possible to set the val() to a newly created option" );
-
- // using contents will get comments regular, text, and comment nodes
- var j = jQuery("#nonnodes").contents();
- j.val(valueObj( "asdf" ));
- equals( j.val(), "asdf", "Check node,textnode,comment with val()" );
- j.removeAttr("value");
-}
-
-test("val(String/Number)", function() {
- testVal(bareObj);
-});
-
-test("val(Function)", function() {
- testVal(functionReturningObj);
-})
-
var testHtml = function(valueObj) {
expect(22);
testHtml(functionReturningObj);
});
-var testText = function(valueObj) {
- expect(4);
- var val = valueObj("<div><b>Hello</b> cruel world!</div>");
- equals( jQuery("#foo").text(val)[0].innerHTML.replace(/>/g, ">"), "<div><b>Hello</b> cruel world!</div>", "Check escaped text" );
+test("html(Function) with incoming value", function() {
+ expect(20);
+
+ var div = jQuery("#main > div"), old = div.map(function(){ return jQuery(this).html() });
+
+ div.html(function(i, val) {
+ equals( val, old[i], "Make sure the incoming value is correct." );
+ return "<b>test</b>";
+ });
+
+ var pass = true;
+ div.each(function(){
+ if ( this.childNodes.length !== 1 ) {
+ pass = false;
+ }
+ })
+ ok( pass, "Set HTML" );
+ reset();
// using contents will get comments regular, text, and comment nodes
var j = jQuery("#nonnodes").contents();
- j.text(valueObj("hi!"));
- equals( jQuery(j[0]).text(), "hi!", "Check node,textnode,comment with text()" );
- equals( j[1].nodeValue, " there ", "Check node,textnode,comment with text()" );
- equals( j[2].nodeType, 8, "Check node,textnode,comment with text()" );
-}
+ old = j.map(function(){ return jQuery(this).html(); });
+
+ j.html(function(i, val) {
+ equals( val, old[i], "Make sure the incoming value is correct." );
+ return "<b>bold</b>";
+ });
+
+ j.find('b').removeData();
+ equals( j.html().replace(/ xmlns="[^"]+"/g, "").toLowerCase(), "<b>bold</b>", "Check node,textnode,comment with html()" );
+
+ var $div = jQuery('<div />');
+
+ equals( $div.html(function(i, val) {
+ equals( val, "", "Make sure the incoming value is correct." );
+ return 5;
+ }).html(), '5', 'Setting a number as html' );
+
+ equals( $div.html(function(i, val) {
+ equals( val, "5", "Make sure the incoming value is correct." );
+ return 0;
+ }).html(), '0', 'Setting a zero as html' );
-test("text(String)", function() {
- testText(bareObj)
+ var $div2 = jQuery('<div/>'), insert = "<div>hello1</div>";
+ equals( $div2.html(function(i, val) {
+ equals( val, "", "Make sure the incoming value is correct." );
+ return insert;
+ }).html(), insert, "Verify escaped insertion." );
+
+ equals( $div2.html(function(i, val) {
+ equals( val, insert, "Make sure the incoming value is correct." );
+ return "x" + insert;
+ }).html(), "x" + insert, "Verify escaped insertion." );
+
+ equals( $div2.html(function(i, val) {
+ equals( val, "x" + insert, "Make sure the incoming value is correct." );
+ return " " + insert;
+ }).html(), " " + insert, "Verify escaped insertion." );
});
-test("text(Function)", function() {
- testText(functionReturningObj);
-})
-
var testRemove = function(method) {
expect(9);
module("offset");
testoffset("absolute", function( jQuery ) {
+ expect(144);
+
// get offset tests
var tests = [
{ id: '#absolute-1', top: 1, left: 1 },
equals( jQuery( this.id ).offset().top, this.top, "jQuery('" + this.id + "').offset({ top: " + this.top + " })" );
equals( jQuery( this.id ).offset().left, this.left, "jQuery('" + this.id + "').offset({ left: " + this.left + " })" );
+ var top = this.top, left = this.left;
+
+ jQuery( this.id ).offset(function(i, val){
+ equals( val.top, top, "Verify incoming top position." );
+ equals( val.left, left, "Verify incoming top position." );
+ return { top: top + 1, left: left + 1 };
+ });
+ equals( jQuery( this.id ).offset().top, this.top + 1, "jQuery('" + this.id + "').offset({ top: " + this.top + " })" );
+ equals( jQuery( this.id ).offset().left, this.left + 1, "jQuery('" + this.id + "').offset({ left: " + this.left + " })" );
+
jQuery( this.id ).offset({ top: this.top, left: this.left, using: function( props ) {
jQuery( this ).css({
top: props.top + 1,
});
testoffset("relative", function( jQuery ) {
+ expect(60);
+
// IE is collapsing the top margin of 1px
var ie = jQuery.browser.msie && parseInt( jQuery.browser.version ) < 8;
});
testoffset("static", function( jQuery ) {
+ expect(80);
+
// IE is collapsing the top margin of 1px
var ie = jQuery.browser.msie && parseInt( jQuery.browser.version ) < 8;
});
testoffset("fixed", function( jQuery ) {
+ expect(28);
+
jQuery.offset.initialize();
var tests = [
});
testoffset("table", function( jQuery ) {
- var ie = jQuery.browser.msie;
+ expect(4);
equals( jQuery('#table-1').offset().top, 6, "jQuery('#table-1').offset().top" );
equals( jQuery('#table-1').offset().left, 6, "jQuery('#table-1').offset().left" );
equals( jQuery('#th-1').offset().top, 10, "jQuery('#th-1').offset().top" );
equals( jQuery('#th-1').offset().left, 10, "jQuery('#th-1').offset().left" );
-
- // equals( jQuery('#th-2').offset().top, 10, "jQuery('#th-2').offset().top" );
- // equals( jQuery('#th-2').offset().left, 116, "jQuery('#th-2').offset().left" );
- //
- // equals( jQuery('#th-3').offset().top, 10, "jQuery('#th-3').offset().top" );
- // equals( jQuery('#th-3').offset().left, 222, "jQuery('#th-3').offset().left" );
-
- // equals( jQuery('#td-1').offset().top, ie ? 116 : 112, "jQuery('#td-1').offset().top" );
- // equals( jQuery('#td-1').offset().left, 10, "jQuery('#td-1').offset().left" );
- //
- // equals( jQuery('#td-2').offset().top, ie ? 116 : 112, "jQuery('#td-2').offset().top" );
- // equals( jQuery('#td-2').offset().left, 116, "jQuery('#td-2').offset().left" );
- //
- // equals( jQuery('#td-3').offset().top, ie ? 116 : 112, "jQuery('#td-3').offset().top" );
- // equals( jQuery('#td-3').offset().left, 222, "jQuery('#td-3').offset().left" );
});
testoffset("scroll", function( jQuery, win ) {
+ expect(12);
+
var ie = jQuery.browser.msie && parseInt( jQuery.browser.version ) < 8;
// IE is collapsing the top margin of 1px
});
testoffset("body", function( jQuery ) {
+ expect(2);
+
equals( jQuery('body').offset().top, 1, "jQuery('#body').offset().top" );
equals( jQuery('body').offset().left, 1, "jQuery('#body').offset().left" );
});