2011-01-09 21:58:47 +00:00
module ( "manipulation" , { teardown : moduleTeardown } ) ;
2009-04-20 17:05:18 +00:00
2010-12-21 03:23:59 +00:00
// Ensure that an extended Array prototype doesn't break jQuery
Array . prototype . arrayProtoFn = function ( arg ) { throw ( "arrayProtoFn should not be called" ) ; } ;
2012-07-05 19:52:13 +00:00
var manipulationBareObj = function ( value ) { return value ; } ;
var manipulationFunctionReturningObj = function ( value ) { return ( function ( ) { return value ; } ) ; } ;
2009-07-12 20:19:43 +00:00
2012-06-21 19:30:24 +00:00
2012-05-29 16:40:13 +00:00
/ *
=== === == local reference === === =
2012-07-05 19:52:13 +00:00
manipulationBareObj and manipulationFunctionReturningObj can be used to test passing functions to setters
2012-05-29 16:40:13 +00:00
See testVal below for an example
bareObj ( value ) ;
This function returns whatever value is passed in
functionReturningObj ( value ) ;
Returns a function that returns the value
* /
2009-03-18 21:15:38 +00:00
test ( "text()" , function ( ) {
2012-03-30 21:09:46 +00:00
expect ( 5 ) ;
2009-03-18 21:15:38 +00:00
var expected = "This link has class=\"blog\": Simon Willison's Weblog" ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for merged text of more then one element." ) ;
2009-11-17 19:52:08 +00:00
// Check serialization of text values
2011-11-06 20:27:42 +00:00
equal ( jQuery ( document . createTextNode ( "foo" ) ) . text ( ) , "foo" , "Text node was retreived from .text()." ) ;
2011-11-08 20:46:48 +00:00
notEqual ( jQuery ( document ) . text ( ) , "" , "Retrieving text for the document retrieves all text (#10724)." ) ;
2012-01-20 21:47:49 +00:00
// Retrieve from document fragments #10864
var frag = document . createDocumentFragment ( ) ;
frag . appendChild ( document . createTextNode ( "foo" ) ) ;
equal ( jQuery ( frag ) . text ( ) , "foo" , "Document Fragment Text node was retreived from .text()." ) ;
2012-03-30 21:09:46 +00:00
var $newLineTest = jQuery ( "<div>test<br/>testy</div>" ) . appendTo ( "#moretests" ) ;
$newLineTest . find ( "br" ) . replaceWith ( "\n" ) ;
equal ( $newLineTest . text ( ) , "test\ntesty" , "text() does not remove new lines (#11153)" ) ;
2012-07-02 15:30:22 +00:00
$newLineTest . remove ( ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2011-12-06 20:25:38 +00:00
test ( "text(undefined)" , function ( ) {
expect ( 1 ) ;
equal ( jQuery ( "#foo" ) . text ( "<div" ) . text ( undefined ) [ 0 ] . innerHTML , "<div" , ".text(undefined) is chainable (#5571)" ) ;
} ) ;
2010-01-07 16:51:48 +00:00
var testText = function ( valueObj ) {
expect ( 4 ) ;
var val = valueObj ( "<div><b>Hello</b> cruel world!</div>" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#foo" ) . text ( val ) [ 0 ] . innerHTML . replace ( />/g , ">" ) , "<div><b>Hello</b> cruel world!</div>" , "Check escaped text" ) ;
2010-01-07 16:51:48 +00:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . text ( valueObj ( "hi!" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( j [ 0 ] ) . text ( ) , "hi!" , "Check node,textnode,comment with text()" ) ;
equal ( j [ 1 ] . nodeValue , " there " , "Check node,textnode,comment with text()" ) ;
2010-08-26 19:36:44 +00:00
// Blackberry 4.6 doesn't maintain comments in the DOM
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#nonnodes" ) [ 0 ] . childNodes . length < 3 ? 8 : j [ 2 ] . nodeType , 8 , "Check node,textnode,comment with text()" ) ;
2011-11-08 14:48:44 +00:00
} ;
2010-01-07 16:51:48 +00:00
test ( "text(String)" , function ( ) {
2012-07-05 19:52:13 +00:00
testText ( manipulationBareObj ) ;
2010-01-07 16:51:48 +00:00
} ) ;
test ( "text(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testText ( manipulationFunctionReturningObj ) ;
2010-01-07 16:51:48 +00:00
} ) ;
test ( "text(Function) with incoming value" , function ( ) {
expect ( 2 ) ;
2010-12-07 01:37:16 +00:00
2010-01-07 16:51:48 +00:00
var old = "This link has class=\"blog\": Simon Willison's Weblog" ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . text ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2010-01-07 16:51:48 +00:00
return "foobar" ;
} ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , "foobar" , "Check for merged text of more then one element." ) ;
2010-12-07 01:37:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 16:51:48 +00:00
} ) ;
2009-07-12 21:08:54 +00:00
var testWrap = function ( val ) {
2010-12-19 21:33:53 +00:00
expect ( 19 ) ;
2011-09-20 13:58:20 +00:00
var defaultText = "Try them out:" ;
2011-04-12 08:47:46 +00:00
var result = jQuery ( "#first" ) . wrap ( val ( "<div class='red'><span></span></div>" ) ) . text ( ) ;
2011-11-06 20:27:42 +00:00
equal ( defaultText , result , "Check for wrapping of on-the-fly html" ) ;
2011-04-12 08:47:46 +00:00
ok ( jQuery ( "#first" ) . parent ( ) . parent ( ) . is ( ".red" ) , "Check if wrapper has class 'red'" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-09-20 13:58:20 +00:00
result = jQuery ( "#first" ) . wrap ( val ( document . getElementById ( "empty" ) ) ) . parent ( ) ;
2011-04-12 08:47:46 +00:00
ok ( result . is ( "ol" ) , "Check for element wrapping" ) ;
2011-11-06 20:27:42 +00:00
equal ( result . text ( ) , defaultText , "Check for element wrapping" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#check1" ) . click ( function ( ) {
2009-03-18 21:15:38 +00:00
var checkbox = this ;
ok ( checkbox . checked , "Checkbox's state is erased after wrap() action, see #769" ) ;
2011-04-12 08:47:46 +00:00
jQuery ( checkbox ) . wrap ( val ( "<div id='c1' style='display:none;'></div>" ) ) ;
2009-03-18 21:15:38 +00:00
ok ( checkbox . checked , "Checkbox's state is erased after wrap() action, see #769" ) ;
} ) . click ( ) ;
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
2009-07-12 21:08:54 +00:00
j . wrap ( val ( "<i></i>" ) ) ;
2010-08-26 19:36:44 +00:00
// Blackberry 4.6 doesn't maintain comments in the DOM
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#nonnodes > i" ) . length , jQuery ( "#nonnodes" ) [ 0 ] . childNodes . length , "Check node,textnode,comment wraps ok" ) ;
equal ( jQuery ( "#nonnodes > i" ) . text ( ) , j . text ( ) , "Check node,textnode,comment wraps doesn't hurt text" ) ;
2009-03-18 21:15:38 +00:00
// Try wrapping a disconnected node
2010-12-19 21:33:53 +00:00
var cacheLength = 0 ;
for ( var i in jQuery . cache ) {
cacheLength ++ ;
}
2009-07-12 21:08:54 +00:00
j = jQuery ( "<label/>" ) . wrap ( val ( "<li/>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( j [ 0 ] . nodeName . toUpperCase ( ) , "LABEL" , "Element is a label" ) ;
equal ( j [ 0 ] . parentNode . nodeName . toUpperCase ( ) , "LI" , "Element has been wrapped" ) ;
2009-07-14 23:28:07 +00:00
2010-12-19 21:33:53 +00:00
for ( i in jQuery . cache ) {
cacheLength -- ;
}
2011-11-06 20:27:42 +00:00
equal ( cacheLength , 0 , "No memory leak in jQuery.cache (bug #7165)" ) ;
2010-12-19 21:33:53 +00:00
2009-07-14 23:28:07 +00:00
// Wrap an element containing a text node
j = jQuery ( "<span/>" ) . wrap ( "<div>test</div>" ) ;
2011-11-06 20:27:42 +00:00
equal ( j [ 0 ] . previousSibling . nodeType , 3 , "Make sure the previous node is a text element" ) ;
equal ( j [ 0 ] . parentNode . nodeName . toUpperCase ( ) , "DIV" , "And that we're in the div element." ) ;
2009-07-14 23:43:58 +00:00
// Try to wrap an element with multiple elements (should fail)
j = jQuery ( "<div><span></span></div>" ) . children ( ) . wrap ( "<p></p><div></div>" ) ;
2011-11-06 20:27:42 +00:00
equal ( j [ 0 ] . parentNode . parentNode . childNodes . length , 1 , "There should only be one element wrapping." ) ;
equal ( j . length , 1 , "There should only be one element (no cloning)." ) ;
equal ( j [ 0 ] . parentNode . nodeName . toUpperCase ( ) , "P" , "The span should be in the paragraph." ) ;
2009-12-08 19:21:24 +00:00
// Wrap an element with a jQuery set
j = jQuery ( "<span/>" ) . wrap ( jQuery ( "<div></div>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( j [ 0 ] . parentNode . nodeName . toLowerCase ( ) , "div" , "Wrapping works." ) ;
2009-12-08 19:21:24 +00:00
// Wrap an element with a jQuery set and event
result = jQuery ( "<div></div>" ) . click ( function ( ) {
ok ( true , "Event triggered." ) ;
2011-01-09 21:58:47 +00:00
// Remove handlers on detached elements
result . unbind ( ) ;
jQuery ( this ) . unbind ( ) ;
2009-12-08 19:21:24 +00:00
} ) ;
j = jQuery ( "<span/>" ) . wrap ( result ) ;
2011-11-06 20:27:42 +00:00
equal ( j [ 0 ] . parentNode . nodeName . toLowerCase ( ) , "div" , "Wrapping works." ) ;
2009-12-08 19:21:24 +00:00
j . parent ( ) . trigger ( "click" ) ;
2011-01-09 21:58:47 +00:00
// clean up attached elements
QUnit . reset ( ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 21:08:54 +00:00
test ( "wrap(String|Element)" , function ( ) {
2012-07-05 19:52:13 +00:00
testWrap ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 21:08:54 +00:00
test ( "wrap(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testWrap ( manipulationFunctionReturningObj ) ;
2011-11-06 21:59:41 +00:00
} ) ;
test ( "wrap(Function) with index (#10177)" , function ( ) {
var expectedIndex = 0 ,
2012-06-21 19:30:24 +00:00
targets = jQuery ( "#qunit-fixture p" ) ;
2011-11-06 21:59:41 +00:00
expect ( targets . length ) ;
targets . wrap ( function ( i ) {
equal ( i , expectedIndex , "Check if the provided index (" + i + ") is as expected (" + expectedIndex + ")" ) ;
expectedIndex ++ ;
return "<div id='wrap_index_'" + i + "'></div>" ;
} ) ;
} ) ;
test ( "wrap(String) consecutive elements (#10177)" , function ( ) {
var targets = jQuery ( "#qunit-fixture p" ) ;
expect ( targets . length * 2 ) ;
targets . wrap ( "<div class='wrapper'></div>" ) ;
2012-01-20 21:47:49 +00:00
2011-11-06 21:59:41 +00:00
targets . each ( function ( ) {
var $this = jQuery ( this ) ;
2012-01-20 21:47:49 +00:00
2011-11-06 21:59:41 +00:00
ok ( $this . parent ( ) . is ( '.wrapper' ) , "Check each elements parent is correct (.wrapper)" ) ;
equal ( $this . siblings ( ) . length , 0 , "Each element should be wrapped individually" ) ;
} ) ;
} ) ;
2009-07-12 21:08:54 +00:00
var testWrapAll = function ( val ) {
2009-03-18 21:15:38 +00:00
expect ( 8 ) ;
var prev = jQuery ( "#firstp" ) [ 0 ] . previousSibling ;
var p = jQuery ( "#firstp,#first" ) [ 0 ] . parentNode ;
2009-07-21 09:17:33 +00:00
2011-04-12 08:47:46 +00:00
var result = jQuery ( "#firstp,#first" ) . wrapAll ( val ( "<div class='red'><div class='tmp'></div></div>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( result . parent ( ) . length , 1 , "Check for wrapping of on-the-fly html" ) ;
2011-04-12 08:47:46 +00:00
ok ( jQuery ( "#first" ) . parent ( ) . parent ( ) . is ( ".red" ) , "Check if wrapper has class 'red'" ) ;
ok ( jQuery ( "#firstp" ) . parent ( ) . parent ( ) . is ( ".red" ) , "Check if wrapper has class 'red'" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . parent ( ) . parent ( ) [ 0 ] . previousSibling , prev , "Correct Previous Sibling" ) ;
equal ( jQuery ( "#first" ) . parent ( ) . parent ( ) [ 0 ] . parentNode , p , "Correct Parent" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2012-06-21 19:30:24 +00:00
prev = jQuery ( "#firstp" ) [ 0 ] . previousSibling ;
p = jQuery ( "#first" ) [ 0 ] . parentNode ;
result = jQuery ( "#firstp,#first" ) . wrapAll ( val ( document . getElementById ( "empty" ) ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . parent ( ) [ 0 ] , jQuery ( "#firstp" ) . parent ( ) [ 0 ] , "Same Parent" ) ;
equal ( jQuery ( "#first" ) . parent ( ) [ 0 ] . previousSibling , prev , "Correct Previous Sibling" ) ;
equal ( jQuery ( "#first" ) . parent ( ) [ 0 ] . parentNode , p , "Correct Parent" ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 21:08:54 +00:00
test ( "wrapAll(String|Element)" , function ( ) {
2012-07-05 19:52:13 +00:00
testWrapAll ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
var testWrapInner = function ( val ) {
2010-01-26 00:16:23 +00:00
expect ( 11 ) ;
2009-03-18 21:15:38 +00:00
var num = jQuery ( "#first" ) . children ( ) . length ;
2011-04-12 08:47:46 +00:00
var result = jQuery ( "#first" ) . wrapInner ( val ( "<div class='red'><div id='tmp'></div></div>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . children ( ) . length , 1 , "Only one child" ) ;
2010-01-26 00:16:23 +00:00
ok ( jQuery ( "#first" ) . children ( ) . is ( ".red" ) , "Verify Right Element" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . children ( ) . children ( ) . children ( ) . length , num , "Verify Elements Intact" ) ;
2010-01-26 00:16:23 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2012-06-21 19:30:24 +00:00
num = jQuery ( "#first" ) . html ( "foo<div>test</div><div>test2</div>" ) . children ( ) . length ;
result = jQuery ( "#first" ) . wrapInner ( val ( "<div class='red'><div id='tmp'></div></div>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . children ( ) . length , 1 , "Only one child" ) ;
2009-03-18 21:15:38 +00:00
ok ( jQuery ( "#first" ) . children ( ) . is ( ".red" ) , "Verify Right Element" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . children ( ) . children ( ) . children ( ) . length , num , "Verify Elements Intact" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2012-06-21 19:30:24 +00:00
num = jQuery ( "#first" ) . children ( ) . length ;
result = jQuery ( "#first" ) . wrapInner ( val ( document . getElementById ( "empty" ) ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . children ( ) . length , 1 , "Only one child" ) ;
2009-03-18 21:15:38 +00:00
ok ( jQuery ( "#first" ) . children ( ) . is ( "#empty" ) , "Verify Right Element" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . children ( ) . children ( ) . length , num , "Verify Elements Intact" ) ;
2010-01-11 21:31:31 +00:00
var div = jQuery ( "<div/>" ) ;
2010-01-26 00:16:23 +00:00
div . wrapInner ( val ( "<span></span>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( div . children ( ) . length , 1 , "The contents were wrapped." ) ;
equal ( div . children ( ) [ 0 ] . nodeName . toLowerCase ( ) , "span" , "A span was inserted." ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 20:19:43 +00:00
test ( "wrapInner(String|Element)" , function ( ) {
2012-07-05 19:52:13 +00:00
testWrapInner ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2010-01-26 00:16:23 +00:00
test ( "wrapInner(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testWrapInner ( manipulationFunctionReturningObj ) ;
2010-01-26 00:16:23 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2010-01-07 16:51:48 +00:00
test ( "unwrap()" , function ( ) {
2009-09-25 21:41:21 +00:00
expect ( 9 ) ;
2011-04-12 08:47:46 +00:00
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>" ) ;
2009-09-25 21:41:21 +00:00
2011-04-12 08:47:46 +00:00
var abcd = jQuery ( "#unwrap1 > span, #unwrap2 > span" ) . get ( ) ,
abcdef = jQuery ( "#unwrap span" ) . get ( ) ;
2009-09-25 21:41:21 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#unwrap1 span" ) . add ( "#unwrap2 span:first" ) . unwrap ( ) . length , 3 , "make #unwrap1 and #unwrap2 go away" ) ;
deepEqual ( jQuery ( "#unwrap > span" ) . get ( ) , abcd , "all four spans should still exist" ) ;
2009-09-25 21:41:21 +00:00
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#unwrap3 span" ) . unwrap ( ) . get ( ) , jQuery ( "#unwrap3 > span" ) . get ( ) , "make all b in #unwrap3 go away" ) ;
2009-09-25 21:41:21 +00:00
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#unwrap3 span" ) . unwrap ( ) . get ( ) , jQuery ( "#unwrap > span.unwrap3" ) . get ( ) , "make #unwrap3 go away" ) ;
2009-09-25 21:41:21 +00:00
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#unwrap" ) . children ( ) . get ( ) , abcdef , "#unwrap only contains 6 child spans" ) ;
2009-09-25 21:41:21 +00:00
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "#unwrap > span" ) . unwrap ( ) . get ( ) , jQuery ( "body > span.unwrap" ) . get ( ) , "make the 6 spans become children of body" ) ;
2009-09-25 21:41:21 +00:00
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "body > span.unwrap" ) . unwrap ( ) . get ( ) , jQuery ( "body > span.unwrap" ) . get ( ) , "can't unwrap children of body" ) ;
deepEqual ( jQuery ( "body > span.unwrap" ) . unwrap ( ) . get ( ) , abcdef , "can't unwrap children of body" ) ;
2009-09-25 21:41:21 +00:00
2011-11-06 20:27:42 +00:00
deepEqual ( jQuery ( "body > span.unwrap" ) . get ( ) , abcdef , "body contains 6 .unwrap child spans" ) ;
2009-09-25 21:41:21 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "body > span.unwrap" ) . remove ( ) ;
2009-09-25 21:41:21 +00:00
} ) ;
2012-06-16 01:37:01 +00:00
var getWrappedElement = function ( ) {
return jQuery ( "#sap" ) ;
} ;
2009-03-18 21:15:38 +00:00
2012-06-16 01:37:01 +00:00
var getWrappedDocumentFragment = function ( ) {
var f = document . createDocumentFragment ( ) ;
// copy contents of #sap into new fragment
var clone = jQuery ( "#sap" ) [ 0 ] . cloneNode ( true ) ;
var childs = clone . childNodes ;
while ( clone . childNodes . length ) {
f . appendChild ( clone . childNodes [ 0 ] ) ;
}
clone = null ;
2012-06-21 19:30:24 +00:00
return jQuery ( f ) ;
2012-06-16 01:37:01 +00:00
} ;
var testAppendForObject = function ( valueObj , isFragment ) {
2009-03-18 21:15:38 +00:00
var expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:" ;
2012-06-16 01:37:01 +00:00
var objType = " " + ( isFragment ? "(DocumentFragment)" : "(Element)" ) ;
var getObj = isFragment ? getWrappedDocumentFragment : getWrappedElement ;
var obj = getObj ( ) ;
obj . append ( valueObj ( document . getElementById ( "first" ) ) ) ;
equal ( obj . text ( ) , expected , "Check for appending of element" + objType ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo" ;
2012-06-16 01:37:01 +00:00
obj = getObj ( ) ;
obj . append ( valueObj ( [ document . getElementById ( "first" ) , document . getElementById ( "yahoo" ) ] ) ) ;
equal ( obj . text ( ) , expected , "Check for appending of array of elements" + objType ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This link has class=\"blog\": Simon Willison's WeblogYahooTry them out:" ;
2012-06-16 01:37:01 +00:00
obj = getObj ( ) ;
obj . append ( valueObj ( jQuery ( "#yahoo, #first" ) ) ) ;
equal ( obj . text ( ) , expected , "Check for appending of jQuery object" + objType ) ;
QUnit . reset ( ) ;
obj = getObj ( ) ;
obj . append ( valueObj ( 5 ) ) ;
ok ( obj . text ( ) . match ( /5$/ ) , "Check for appending a number" + objType ) ;
2012-06-16 02:17:05 +00:00
QUnit . reset ( ) ;
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:GoogleYahoo" ;
obj = getObj ( ) ;
obj . append ( valueObj ( [ jQuery ( "#first" ) , jQuery ( "#yahoo, #google" ) ] ) ) ;
equal ( obj . text ( ) , expected , "Check for appending of array of jQuery objects" ) ;
2012-06-16 01:37:01 +00:00
QUnit . reset ( ) ;
obj = getObj ( ) ;
obj . append ( valueObj ( " text with spaces " ) ) ;
ok ( obj . text ( ) . match ( / text with spaces $/ ) , "Check for appending text with spaces" + objType ) ;
QUnit . reset ( ) ;
obj = getObj ( ) ;
ok ( obj . append ( valueObj ( [ ] ) ) , "Check for appending an empty array." + objType ) ;
ok ( obj . append ( valueObj ( "" ) ) , "Check for appending an empty string." + objType ) ;
ok ( obj . append ( valueObj ( document . getElementsByTagName ( "foo" ) ) ) , "Check for appending an empty nodelist." + objType ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2012-06-16 01:37:01 +00:00
obj = getObj ( ) ;
obj . append ( valueObj ( document . getElementById ( "form" ) ) ) ;
equal ( obj . children ( "form" ) . size ( ) , 1 , "Check for appending a form" + objType ) ; // Bug #910
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2012-06-21 19:30:24 +00:00
obj = getObj ( ) ;
2012-06-16 01:37:01 +00:00
var prev = obj . children ( ) . length ;
obj . append (
"<span></span>" ,
"<span></span>" ,
"<span></span>"
) ;
2009-03-18 21:15:38 +00:00
2012-06-16 01:37:01 +00:00
equal ( obj . children ( ) . length , prev + 3 , "Make sure that multiple arguments works." + objType ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2012-06-21 19:30:24 +00:00
} ;
2012-06-16 01:37:01 +00:00
var testAppend = function ( valueObj ) {
2012-06-16 02:17:05 +00:00
expect ( 58 ) ;
2012-06-16 01:37:01 +00:00
testAppendForObject ( valueObj , false ) ;
testAppendForObject ( valueObj , true ) ;
2012-06-21 19:30:24 +00:00
var defaultText = "Try them out:" ;
2012-06-16 01:37:01 +00:00
var result = jQuery ( "#first" ) . append ( valueObj ( "<b>buga</b>" ) ) ;
equal ( result . text ( ) , defaultText + "buga" , "Check if text appending works" ) ;
equal ( jQuery ( "#select3" ) . append ( valueObj ( "<option value='appendTest'>Append Test</option>" ) ) . find ( "option:last-child" ) . attr ( "value" ) , "appendTest" , "Appending html options to select element" ) ;
2010-12-07 01:37:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "form" ) . append ( valueObj ( "<input name='radiotest' type='radio' checked='checked' />" ) ) ;
2010-01-25 23:43:33 +00:00
jQuery ( "form input[name=radiotest]" ) . each ( function ( ) {
2011-04-12 08:47:46 +00:00
ok ( jQuery ( this ) . is ( ":checked" ) , "Append checked radio" ) ;
2010-01-25 23:43:33 +00:00
} ) . remove ( ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "form" ) . append ( valueObj ( "<input name='radiotest' type='radio' checked = 'checked' />" ) ) ;
2010-01-25 23:43:33 +00:00
jQuery ( "form input[name=radiotest]" ) . each ( function ( ) {
2011-04-12 08:47:46 +00:00
ok ( jQuery ( this ) . is ( ":checked" ) , "Append alternately formated checked radio" ) ;
2010-01-25 23:43:33 +00:00
} ) . remove ( ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "form" ) . append ( valueObj ( "<input name='radiotest' type='radio' checked />" ) ) ;
2010-01-25 23:43:33 +00:00
jQuery ( "form input[name=radiotest]" ) . each ( function ( ) {
2011-04-12 08:47:46 +00:00
ok ( jQuery ( this ) . is ( ":checked" ) , "Append HTML5-formated checked radio" ) ;
2010-01-25 23:43:33 +00:00
} ) . remove ( ) ;
2009-03-18 21:15:38 +00:00
2012-02-09 14:45:34 +00:00
QUnit . reset ( ) ;
jQuery ( "form" ) . append ( valueObj ( "<input type='radio' checked='checked' name='radiotest' />" ) ) ;
jQuery ( "form input[name=radiotest]" ) . each ( function ( ) {
ok ( jQuery ( this ) . is ( ":checked" ) , "Append with name attribute after checked attribute" ) ;
} ) . remove ( ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
var pass = true ;
try {
2010-08-26 18:57:23 +00:00
var body = jQuery ( "#iframe" ) [ 0 ] . contentWindow . document . body ;
2009-03-18 21:15:38 +00:00
pass = false ;
2010-08-26 19:26:30 +00:00
jQuery ( body ) . append ( valueObj ( "<div>test</div>" ) ) ;
2010-08-26 18:57:23 +00:00
pass = true ;
} catch ( e ) { }
2009-03-18 21:15:38 +00:00
ok ( pass , "Test for appending a DOM node to the contents of an IFrame" ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "<fieldset/>" ) . appendTo ( "#form" ) . append ( valueObj ( "<legend id='legend'>test</legend>" ) ) ;
t ( "Append legend" , "#legend" , [ "legend" ] ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#select1" ) . append ( valueObj ( "<OPTION>Test</OPTION>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select1 option:last" ) . text ( ) , "Test" , "Appending <OPTION> (all caps)" ) ;
2009-03-18 21:15:38 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#table" ) . append ( valueObj ( "<colgroup></colgroup>" ) ) ;
ok ( jQuery ( "#table colgroup" ) . length , "Append colgroup" ) ;
2009-03-18 21:15:38 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#table colgroup" ) . append ( valueObj ( "<col/>" ) ) ;
ok ( jQuery ( "#table colgroup col" ) . length , "Append col" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#table" ) . append ( valueObj ( "<caption></caption>" ) ) ;
ok ( jQuery ( "#table caption" ) . length , "Append caption" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "form:last" )
. append ( valueObj ( "<select id='appendSelect1'></select>" ) )
. append ( valueObj ( "<select id='appendSelect2'><option>Test</option></select>" ) ) ;
2009-03-18 21:15:38 +00:00
t ( "Append Select" , "#appendSelect1, #appendSelect2" , [ "appendSelect1" , "appendSelect2" ] ) ;
2011-11-06 20:27:42 +00:00
equal ( "Two nodes" , jQuery ( "<div />" ) . append ( "Two" , " nodes" ) . text ( ) , "Appending two text nodes (#4011)" ) ;
2009-12-06 01:06:00 +00:00
2009-03-18 21:15:38 +00:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
var d = jQuery ( "<div/>" ) . appendTo ( "#nonnodes" ) . append ( j ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#nonnodes" ) . length , 1 , "Check node,textnode,comment append moved leaving just the div" ) ;
2009-03-18 21:15:38 +00:00
ok ( d . contents ( ) . length >= 2 , "Check node,textnode,comment append works" ) ;
d . contents ( ) . appendTo ( "#nonnodes" ) ;
d . remove ( ) ;
ok ( jQuery ( "#nonnodes" ) . contents ( ) . length >= 2 , "Check node,textnode,comment append cleanup worked" ) ;
2011-04-22 01:51:23 +00:00
QUnit . reset ( ) ;
var $input = jQuery ( "<input />" ) . attr ( { "type" : "checkbox" , "checked" : true } ) . appendTo ( '#testForm' ) ;
2011-11-06 20:27:42 +00:00
equal ( $input [ 0 ] . checked , true , "A checked checkbox that is appended stays checked" ) ;
2011-04-22 01:51:23 +00:00
QUnit . reset ( ) ;
var $radios = jQuery ( "input:radio[name='R1']" ) ,
$radioNot = jQuery ( "<input type='radio' name='R1' checked='checked'/>" ) . insertAfter ( $radios ) ,
$radio = $radios . eq ( 1 ) . click ( ) ;
$radioNot [ 0 ] . checked = false ;
$radios . parent ( ) . wrap ( "<div></div>" ) ;
2011-11-06 20:27:42 +00:00
equal ( $radio [ 0 ] . checked , true , "Reappending radios uphold which radio is checked" ) ;
equal ( $radioNot [ 0 ] . checked , false , "Reappending radios uphold not being checked" ) ;
2011-04-22 01:51:23 +00:00
QUnit . reset ( ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 20:19:43 +00:00
test ( "append(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-07-05 19:52:13 +00:00
testAppend ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
test ( "append(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testAppend ( manipulationFunctionReturningObj ) ;
2010-01-07 18:34:16 +00:00
} ) ;
test ( "append(Function) with incoming value" , function ( ) {
expect ( 12 ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
var defaultText = "Try them out:" , old = jQuery ( "#first" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
var result = jQuery ( "#first" ) . append ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2011-04-12 08:47:46 +00:00
return "<b>buga</b>" ;
2010-01-07 18:34:16 +00:00
} ) ;
2011-11-06 20:27:42 +00:00
equal ( result . text ( ) , defaultText + "buga" , "Check if text appending works" ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
var select = jQuery ( "#select3" ) ;
2010-01-07 18:34:16 +00:00
old = select . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( select . append ( function ( i , val ) {
equal ( val , old , "Make sure the incoming value is correct." ) ;
2011-04-12 08:47:46 +00:00
return "<option value='appendTest'>Append Test</option>" ;
} ) . find ( "option:last-child" ) . attr ( "value" ) , "appendTest" , "Appending html options to select element" ) ;
2010-01-07 18:34:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
var expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:" ;
old = jQuery ( "#sap" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . append ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2011-04-12 08:47:46 +00:00
return document . getElementById ( "first" ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for appending of element" ) ;
2010-01-07 18:34:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo" ;
old = jQuery ( "#sap" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . append ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2011-04-12 08:47:46 +00:00
return [ document . getElementById ( "first" ) , document . getElementById ( "yahoo" ) ] ;
2010-01-07 18:34:16 +00:00
} ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for appending of array of elements" ) ;
2010-01-07 18:34:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
expected = "This link has class=\"blog\": Simon Willison's WeblogYahooTry them out:" ;
old = jQuery ( "#sap" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . append ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2010-08-26 18:57:23 +00:00
return jQuery ( "#yahoo, #first" ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for appending of jQuery object" ) ;
2010-01-07 18:34:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
old = jQuery ( "#sap" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2010-01-07 18:34:16 +00:00
jQuery ( "#sap" ) . append ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return 5 ;
} ) ;
2010-12-07 01:37:16 +00:00
ok ( jQuery ( "#sap" ) [ 0 ] . innerHTML . match ( /5$/ ) , "Check for appending a number" ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2010-12-07 01:37:16 +00:00
test ( "append the same fragment with events (Bug #6997, 5566)" , function ( ) {
2012-07-05 19:52:13 +00:00
var doExtra = ! jQuery . support . noCloneEvent && document [ "fireEvent" ] ;
2011-02-23 18:18:44 +00:00
expect ( 2 + ( doExtra ? 1 : 0 ) ) ;
2011-09-20 13:58:20 +00:00
stop ( ) ;
2010-12-07 01:37:16 +00:00
2010-12-12 08:20:31 +00:00
var element ;
// This patch modified the way that cloning occurs in IE; we need to make sure that
2010-12-12 19:37:00 +00:00
// native event handlers on the original object don't get disturbed when they are
2010-12-12 08:20:31 +00:00
// modified on the clone
2011-02-23 18:18:44 +00:00
if ( doExtra ) {
2010-12-12 08:20:31 +00:00
element = jQuery ( "div:first" ) . click ( function ( ) {
ok ( true , "Event exists on original after being unbound on clone" ) ;
2011-04-12 08:47:46 +00:00
jQuery ( this ) . unbind ( "click" ) ;
2010-12-12 08:20:31 +00:00
} ) ;
2011-04-12 08:47:46 +00:00
var clone = element . clone ( true ) . unbind ( "click" ) ;
clone [ 0 ] . fireEvent ( "onclick" ) ;
element [ 0 ] . fireEvent ( "onclick" ) ;
2011-01-09 21:58:47 +00:00
// manually clean up detached elements
clone . remove ( ) ;
2010-12-12 08:20:31 +00:00
}
element = jQuery ( "<a class='test6997'></a>" ) . click ( function ( ) {
2010-12-07 01:37:16 +00:00
ok ( true , "Append second element events work" ) ;
} ) ;
jQuery ( "#listWithTabIndex li" ) . append ( element )
2011-04-12 08:47:46 +00:00
. find ( "a.test6997" ) . eq ( 1 ) . click ( ) ;
2010-12-07 01:37:16 +00:00
element = jQuery ( "<li class='test6997'></li>" ) . click ( function ( ) {
ok ( true , "Before second element events work" ) ;
start ( ) ;
} ) ;
jQuery ( "#listWithTabIndex li" ) . before ( element ) ;
jQuery ( "#listWithTabIndex li.test6997" ) . eq ( 1 ) . click ( ) ;
} ) ;
2011-09-19 20:42:36 +00:00
test ( "append HTML5 sectioning elements (Bug #6485)" , function ( ) {
expect ( 2 ) ;
jQuery ( "#qunit-fixture" ) . append ( "<article style='font-size:10px'><section><aside>HTML5 elements</aside></section></article>" ) ;
var article = jQuery ( "article" ) ,
aside = jQuery ( "aside" ) ;
2012-06-11 01:54:16 +00:00
equal ( article . get ( 0 ) . style . fontSize , "10px" , "HTML5 elements are styleable" ) ;
2012-06-21 19:30:24 +00:00
equal ( aside . length , 1 , "HTML5 elements do not collapse their children" ) ;
2011-10-23 20:07:07 +00:00
} ) ;
2012-06-11 01:54:16 +00:00
if ( jQuery . css ) {
test ( "HTML5 Elements inherit styles from style rules (Bug #10501)" , function ( ) {
expect ( 1 ) ;
2011-10-23 20:07:07 +00:00
2012-06-11 01:54:16 +00:00
jQuery ( "#qunit-fixture" ) . append ( "<article id='article'></article>" ) ;
jQuery ( "#article" ) . append ( "<section>This section should have a pink background.</section>" ) ;
2011-10-23 20:07:07 +00:00
2012-06-11 01:54:16 +00:00
// In IE, the missing background color will claim its value is "transparent"
notEqual ( jQuery ( "section" ) . css ( "background-color" ) , "transparent" , "HTML5 elements inherit styles" ) ;
} ) ;
}
2011-09-19 20:42:36 +00:00
2011-11-08 05:05:33 +00:00
test ( "html5 clone() cannot use the fragment cache in IE (#6485)" , function ( ) {
2011-09-19 20:42:36 +00:00
expect ( 1 ) ;
jQuery ( "<article><section><aside>HTML5 elements</aside></section></article>" ) . appendTo ( "#qunit-fixture" ) ;
var clone = jQuery ( "article" ) . clone ( ) ;
jQuery ( "#qunit-fixture" ) . append ( clone ) ;
equal ( jQuery ( "aside" ) . length , 2 , "clone()ing HTML5 elems does not collapse them" ) ;
} ) ;
test ( "html(String) with HTML5 (Bug #6485)" , function ( ) {
expect ( 2 ) ;
jQuery ( "#qunit-fixture" ) . html ( "<article><section><aside>HTML5 elements</aside></section></article>" ) ;
equal ( jQuery ( "#qunit-fixture" ) . children ( ) . children ( ) . length , 1 , "Make sure HTML5 article elements can hold children. innerHTML shortcut path" ) ;
equal ( jQuery ( "#qunit-fixture" ) . children ( ) . children ( ) . children ( ) . length , 1 , "Make sure nested HTML5 elements can hold children." ) ;
} ) ;
2012-04-05 16:12:38 +00:00
test ( "IE8 serialization bug" , function ( ) {
expect ( 2 ) ;
var wrapper = jQuery ( "<div></div>" ) ;
wrapper . html ( "<div></div><article></article>" ) ;
equal ( wrapper . children ( "article" ) . length , 1 , "HTML5 elements are insertable with .html()" ) ;
2012-04-11 16:00:42 +00:00
2012-04-05 16:12:38 +00:00
wrapper . html ( "<div></div><link></link>" ) ;
equal ( wrapper . children ( "link" ) . length , 1 , "Link elements are insertable with .html()" ) ;
} ) ;
2012-03-23 15:31:05 +00:00
test ( "html() object element #10324" , function ( ) {
expect ( 1 ) ;
2012-04-17 01:57:41 +00:00
var object = jQuery ( "<object id='object2'><param name='object2test' value='test'></param></object>?" ) . appendTo ( "#qunit-fixture" ) ,
2012-03-23 15:31:05 +00:00
clone = object . clone ( ) ;
equal ( clone . html ( ) , object . html ( ) , "html() returns correct innerhtml of cloned object elements" ) ;
} ) ;
2011-05-26 00:48:59 +00:00
test ( "append(xml)" , function ( ) {
expect ( 1 ) ;
function createXMLDoc ( ) {
// Initialize DOM based upon latest installed MSXML or Netscape
var elem ,
aActiveX =
[ "MSXML6.DomDocument" ,
"MSXML3.DomDocument" ,
"MSXML2.DomDocument" ,
"MSXML.DomDocument" ,
"Microsoft.XmlDom" ] ;
if ( document . implementation && "createDocument" in document . implementation ) {
return document . implementation . createDocument ( "" , "" , null ) ;
} else {
// IE
for ( var n = 0 , len = aActiveX . length ; n < len ; n ++ ) {
try {
elem = new ActiveXObject ( aActiveX [ n ] ) ;
return elem ;
2012-06-21 19:30:24 +00:00
} catch ( _ ) { }
2011-05-26 00:48:59 +00:00
}
}
}
var xmlDoc = createXMLDoc ( ) ,
xml1 = xmlDoc . createElement ( "head" ) ,
xml2 = xmlDoc . createElement ( "test" ) ;
ok ( jQuery ( xml1 ) . append ( xml2 ) , "Append an xml element to another without raising an exception." ) ;
} ) ;
2009-03-18 21:15:38 +00:00
test ( "appendTo(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-06-11 11:59:34 +00:00
expect ( 16 + ( jQuery . getScript ? 1 : 0 ) ) ;
2010-02-13 08:14:00 +00:00
2012-06-21 19:30:24 +00:00
var defaultText = "Try them out:" ;
2011-04-12 08:47:46 +00:00
jQuery ( "<b>buga</b>" ) . appendTo ( "#first" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . text ( ) , defaultText + "buga" , "Check if text appending works" ) ;
equal ( jQuery ( "<option value='appendTest'>Append Test</option>" ) . appendTo ( "#select3" ) . parent ( ) . find ( "option:last-child" ) . attr ( "value" ) , "appendTest" , "Appending html options to select element" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-03-05 05:14:47 +00:00
var l = jQuery ( "#first" ) . children ( ) . length + 2 ;
jQuery ( "<strong>test</strong>" ) ;
jQuery ( "<strong>test</strong>" ) ;
jQuery ( [ jQuery ( "<strong>test</strong>" ) [ 0 ] , jQuery ( "<strong>test</strong>" ) [ 0 ] ] )
. appendTo ( "#first" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . children ( ) . length , l , "Make sure the elements were inserted." ) ;
equal ( jQuery ( "#first" ) . children ( ) . last ( ) [ 0 ] . nodeName . toLowerCase ( ) , "strong" , "Verify the last element." ) ;
2010-03-05 05:07:57 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
var expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:" ;
2011-04-12 08:47:46 +00:00
jQuery ( document . getElementById ( "first" ) ) . appendTo ( "#sap" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for appending of element" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo" ;
2011-04-12 08:47:46 +00:00
jQuery ( [ document . getElementById ( "first" ) , document . getElementById ( "yahoo" ) ] ) . appendTo ( "#sap" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for appending of array of elements" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
ok ( jQuery ( document . createElement ( "script" ) ) . appendTo ( "body" ) . length , "Make sure a disconnected script can be appended." ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This link has class=\"blog\": Simon Willison's WeblogYahooTry them out:" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo, #first" ) . appendTo ( "#sap" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for appending of jQuery object" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#select1" ) . appendTo ( "#foo" ) ;
t ( "Append select" , "#foo select" , [ "select1" ] ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
var div = jQuery ( "<div/>" ) . click ( function ( ) {
ok ( true , "Running a cloned click." ) ;
} ) ;
2011-04-17 06:43:57 +00:00
div . appendTo ( "#qunit-fixture, #moretests" ) ;
2009-03-18 21:15:38 +00:00
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture div:last" ) . click ( ) ;
2009-03-18 21:15:38 +00:00
jQuery ( "#moretests div:last" ) . click ( ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-10-12 04:06:30 +00:00
div = jQuery ( "<div/>" ) . appendTo ( "#qunit-fixture, #moretests" ) ;
2009-03-18 21:15:38 +00:00
2011-11-06 20:27:42 +00:00
equal ( div . length , 2 , "appendTo returns the inserted elements" ) ;
2009-07-21 09:17:33 +00:00
2009-03-18 21:15:38 +00:00
div . addClass ( "test" ) ;
2011-04-17 06:43:57 +00:00
ok ( jQuery ( "#qunit-fixture div:last" ) . hasClass ( "test" ) , "appendTo element was modified after the insertion" ) ;
2009-03-18 21:15:38 +00:00
ok ( jQuery ( "#moretests div:last" ) . hasClass ( "test" ) , "appendTo element was modified after the insertion" ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-02-13 07:49:04 +00:00
div = jQuery ( "<div/>" ) ;
jQuery ( "<span>a</span><b>b</b>" ) . filter ( "span" ) . appendTo ( div ) ;
2011-11-06 20:27:42 +00:00
equal ( div . children ( ) . length , 1 , "Make sure the right number of children were inserted." ) ;
2010-02-13 08:14:00 +00:00
div = jQuery ( "#moretests div" ) ;
2011-04-17 06:43:57 +00:00
var num = jQuery ( "#qunit-fixture div" ) . length ;
div . remove ( ) . appendTo ( "#qunit-fixture" ) ;
2010-02-13 08:14:00 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#qunit-fixture div" ) . length , num , "Make sure all the removed divs were inserted." ) ;
2010-02-13 08:14:00 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-10-12 04:06:30 +00:00
2012-06-11 11:59:34 +00:00
if ( jQuery . getScript ) {
stop ( ) ;
jQuery . getScript ( 'data/test.js' , function ( ) {
jQuery ( 'script[src*="data\\/test\\.js"]' ) . remove ( ) ;
start ( ) ;
} ) ;
}
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
var testPrepend = function ( val ) {
2012-06-16 02:17:05 +00:00
expect ( 6 ) ;
2012-06-21 19:30:24 +00:00
var defaultText = "Try them out:" ,
result = jQuery ( "#first" ) . prepend ( val ( "<b>buga</b>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( result . text ( ) , "buga" + defaultText , "Check if text prepending works" ) ;
equal ( jQuery ( "#select3" ) . prepend ( val ( "<option value='prependTest'>Prepend Test</option>" ) ) . find ( "option:first-child" ) . attr ( "value" ) , "prependTest" , "Prepending html options to select element" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
var expected = "Try them out:This link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . prepend ( val ( document . getElementById ( "first" ) ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of element" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . prepend ( val ( [ document . getElementById ( "first" ) , document . getElementById ( "yahoo" ) ] ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of array of elements" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "YahooTry them out:This link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . prepend ( val ( jQuery ( "#yahoo, #first" ) ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of jQuery object" ) ;
2012-06-16 02:17:05 +00:00
QUnit . reset ( ) ;
expected = "Try them out:GoogleYahooThis link has class=\"blog\": Simon Willison's Weblog" ;
jQuery ( "#sap" ) . prepend ( val ( [ jQuery ( "#first" ) , jQuery ( "#yahoo, #google" ) ] ) ) ;
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of array of jQuery objects" ) ;
2010-01-07 18:34:16 +00:00
} ;
2009-07-12 20:19:43 +00:00
test ( "prepend(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-07-05 19:52:13 +00:00
testPrepend ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
test ( "prepend(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testPrepend ( manipulationFunctionReturningObj ) ;
2010-01-07 18:34:16 +00:00
} ) ;
test ( "prepend(Function) with incoming value" , function ( ) {
expect ( 10 ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
var defaultText = "Try them out:" , old = jQuery ( "#first" ) . html ( ) ;
var result = jQuery ( "#first" ) . prepend ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2011-04-12 08:47:46 +00:00
return "<b>buga</b>" ;
2010-01-07 18:34:16 +00:00
} ) ;
2011-11-06 20:27:42 +00:00
equal ( result . text ( ) , "buga" + defaultText , "Check if text prepending works" ) ;
2010-12-07 01:37:16 +00:00
2010-01-07 18:34:16 +00:00
old = jQuery ( "#select3" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#select3" ) . prepend ( function ( i , val ) {
equal ( val , old , "Make sure the incoming value is correct." ) ;
2011-04-12 08:47:46 +00:00
return "<option value='prependTest'>Prepend Test</option>" ;
} ) . find ( "option:first-child" ) . attr ( "value" ) , "prependTest" , "Prepending html options to select element" ) ;
2010-01-07 18:34:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
var expected = "Try them out:This link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
old = jQuery ( "#sap" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . prepend ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2011-04-12 08:47:46 +00:00
return document . getElementById ( "first" ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of element" ) ;
2010-01-07 18:34:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
old = jQuery ( "#sap" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . prepend ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2011-04-12 08:47:46 +00:00
return [ document . getElementById ( "first" ) , document . getElementById ( "yahoo" ) ] ;
2010-01-07 18:34:16 +00:00
} ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of array of elements" ) ;
2010-01-07 18:34:16 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
expected = "YahooTry them out:This link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
old = jQuery ( "#sap" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#sap" ) . prepend ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old , "Make sure the incoming value is correct." ) ;
2010-08-26 18:57:23 +00:00
return jQuery ( "#yahoo, #first" ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of jQuery object" ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2009-03-18 21:15:38 +00:00
test ( "prependTo(String|Element|Array<Element>|jQuery)" , function ( ) {
expect ( 6 ) ;
2012-06-21 19:30:24 +00:00
var defaultText = "Try them out:" ;
2011-04-12 08:47:46 +00:00
jQuery ( "<b>buga</b>" ) . prependTo ( "#first" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . text ( ) , "buga" + defaultText , "Check if text prepending works" ) ;
equal ( jQuery ( "<option value='prependTest'>Prepend Test</option>" ) . prependTo ( "#select3" ) . parent ( ) . find ( "option:first-child" ) . attr ( "value" ) , "prependTest" , "Prepending html options to select element" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
var expected = "Try them out:This link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
jQuery ( document . getElementById ( "first" ) ) . prependTo ( "#sap" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of element" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
jQuery ( [ document . getElementById ( "first" ) , document . getElementById ( "yahoo" ) ] ) . prependTo ( "#sap" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of array of elements" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "YahooTry them out:This link has class=\"blog\": Simon Willison's Weblog" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo, #first" ) . prependTo ( "#sap" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#sap" ) . text ( ) , expected , "Check for prepending of jQuery object" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "<select id='prependSelect1'></select>" ) . prependTo ( "form:last" ) ;
jQuery ( "<select id='prependSelect2'><option>Test</option></select>" ) . prependTo ( "form:last" ) ;
2009-03-18 21:15:38 +00:00
t ( "Prepend Select" , "#prependSelect2, #prependSelect1" , [ "prependSelect2" , "prependSelect1" ] ) ;
} ) ;
2009-07-12 20:19:43 +00:00
var testBefore = function ( val ) {
2012-06-16 02:17:05 +00:00
expect ( 7 ) ;
2011-04-12 08:47:46 +00:00
var expected = "This is a normal link: bugaYahoo" ;
jQuery ( "#yahoo" ) . before ( val ( "<b>buga</b>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert String before" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: Try them out:Yahoo" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . before ( val ( document . getElementById ( "first" ) ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert element before" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: Try them out:diveintomarkYahoo" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . before ( val ( [ document . getElementById ( "first" ) , document . getElementById ( "mark" ) ] ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert array of elements before" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: diveintomarkTry them out:Yahoo" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . before ( val ( jQuery ( "#mark, #first" ) ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert jQuery before" ) ;
2009-09-14 22:09:42 +00:00
2012-06-16 02:17:05 +00:00
QUnit . reset ( ) ;
expected = "This is a normal link: Try them out:GooglediveintomarkYahoo" ;
jQuery ( "#yahoo" ) . before ( val ( [ jQuery ( "#first" ) , jQuery ( "#mark, #google" ) ] ) ) ;
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert array of jQuery objects before" ) ;
A follow-up to [6578] (which stopped adding expandos to elements that didn't have data). That broke jQuery.unique() (so we're now using the unique from Sizzle). Using Sizzle's unique (which also sorts in document order) changed how add, andSelf, parents, nextAll, prevAll, and siblings work. after and before were changed to not use .add() (in order to guarantee their position in the jQuery set). Also, jQuery.data(elem) was updated to return that element's data object (instead of its ID).
$("<div/>").after("<span/>")
=> [ div, span ]
(calling after on a disconnected DOM node adds the nodes to the end of the jQuery set)
$("<div/>").before("<span/>")
=> [ span, div ]
(calling before on a disconnected DOM node adds the nodes to the beginning of the jQuery set)
$("div").add("span")
=> [ div, span, span, div, span ]
(results now come out in document order)
$("div").find("code").andSelf();
=> [ div, code, code ]
(results now come out in document order)
Same goes for .parents(), .nextAll(), .prevAll(), and .siblings().
Exception: .parents() will still return the results in reverse document order.
jQuery.data(elem)
=> { object of data }
(no longer returns the unique ID assigned to the node)
2009-09-25 17:55:20 +00:00
var set = jQuery ( "<div/>" ) . before ( "<span>test</span>" ) ;
2011-11-06 20:27:42 +00:00
equal ( set [ 0 ] . nodeName . toLowerCase ( ) , "span" , "Insert the element before the disconnected node." ) ;
equal ( set . length , 2 , "Insert the element before the disconnected node." ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 20:19:43 +00:00
test ( "before(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-07-05 19:52:13 +00:00
testBefore ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
test ( "before(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testBefore ( manipulationFunctionReturningObj ) ;
2012-06-21 19:30:24 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2012-08-24 15:57:48 +00:00
test ( "before and after w/ empty object (#10812)" , function ( ) {
expect ( 2 ) ;
2011-11-17 16:47:56 +00:00
2012-08-24 15:57:48 +00:00
var res = jQuery ( "#notInTheDocument" ) . before ( "(" ) . after ( ")" ) ;
equal ( res . length , 2 , "didn't choke on empty object" ) ;
equal ( res . wrapAll ( "<div/>" ) . parent ( ) . text ( ) , "()" , "correctly appended text" ) ;
2011-11-17 16:47:56 +00:00
} ) ;
2012-07-10 14:14:43 +00:00
test ( "before and after on disconnected node (#10517)" , function ( ) {
expect ( 2 ) ;
equal ( jQuery ( "<input type='checkbox'/>" ) . before ( "<div/>" ) . length , 2 , "before() returned all elements" ) ;
equal ( jQuery ( "<input type='checkbox'/>" ) . after ( "<div/>" ) . length , 2 , "after() returned all elements" ) ;
} ) ;
2009-03-18 21:15:38 +00:00
test ( "insertBefore(String|Element|Array<Element>|jQuery)" , function ( ) {
expect ( 4 ) ;
2011-04-12 08:47:46 +00:00
var expected = "This is a normal link: bugaYahoo" ;
jQuery ( "<b>buga</b>" ) . insertBefore ( "#yahoo" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert String before" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: Try them out:Yahoo" ;
2011-04-12 08:47:46 +00:00
jQuery ( document . getElementById ( "first" ) ) . insertBefore ( "#yahoo" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert element before" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: Try them out:diveintomarkYahoo" ;
2011-04-12 08:47:46 +00:00
jQuery ( [ document . getElementById ( "first" ) , document . getElementById ( "mark" ) ] ) . insertBefore ( "#yahoo" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert array of elements before" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: diveintomarkTry them out:Yahoo" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#mark, #first" ) . insertBefore ( "#yahoo" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert jQuery before" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
var testAfter = function ( val ) {
2012-06-16 02:17:05 +00:00
expect ( 7 ) ;
2011-04-12 08:47:46 +00:00
var expected = "This is a normal link: Yahoobuga" ;
jQuery ( "#yahoo" ) . after ( val ( "<b>buga</b>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert String after" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: YahooTry them out:" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . after ( val ( document . getElementById ( "first" ) ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert element after" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: YahooTry them out:diveintomark" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . after ( val ( [ document . getElementById ( "first" ) , document . getElementById ( "mark" ) ] ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert array of elements after" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: YahoodiveintomarkTry them out:" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . after ( val ( jQuery ( "#mark, #first" ) ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert jQuery after" ) ;
2009-09-14 22:09:42 +00:00
2012-06-16 02:17:05 +00:00
QUnit . reset ( ) ;
expected = "This is a normal link: YahooTry them out:Googlediveintomark" ;
jQuery ( "#yahoo" ) . after ( val ( [ jQuery ( "#first" ) , jQuery ( "#mark, #google" ) ] ) ) ;
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert array of jQuery objects after" ) ;
A follow-up to [6578] (which stopped adding expandos to elements that didn't have data). That broke jQuery.unique() (so we're now using the unique from Sizzle). Using Sizzle's unique (which also sorts in document order) changed how add, andSelf, parents, nextAll, prevAll, and siblings work. after and before were changed to not use .add() (in order to guarantee their position in the jQuery set). Also, jQuery.data(elem) was updated to return that element's data object (instead of its ID).
$("<div/>").after("<span/>")
=> [ div, span ]
(calling after on a disconnected DOM node adds the nodes to the end of the jQuery set)
$("<div/>").before("<span/>")
=> [ span, div ]
(calling before on a disconnected DOM node adds the nodes to the beginning of the jQuery set)
$("div").add("span")
=> [ div, span, span, div, span ]
(results now come out in document order)
$("div").find("code").andSelf();
=> [ div, code, code ]
(results now come out in document order)
Same goes for .parents(), .nextAll(), .prevAll(), and .siblings().
Exception: .parents() will still return the results in reverse document order.
jQuery.data(elem)
=> { object of data }
(no longer returns the unique ID assigned to the node)
2009-09-25 17:55:20 +00:00
var set = jQuery ( "<div/>" ) . after ( "<span>test</span>" ) ;
2011-11-06 20:27:42 +00:00
equal ( set [ 1 ] . nodeName . toLowerCase ( ) , "span" , "Insert the element after the disconnected node." ) ;
equal ( set . length , 2 , "Insert the element after the disconnected node." ) ;
2009-07-12 20:19:43 +00:00
} ;
test ( "after(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-07-05 19:52:13 +00:00
testAfter ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
test ( "after(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testAfter ( manipulationFunctionReturningObj ) ;
2012-06-21 19:30:24 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2009-03-18 21:15:38 +00:00
test ( "insertAfter(String|Element|Array<Element>|jQuery)" , function ( ) {
expect ( 4 ) ;
2011-04-12 08:47:46 +00:00
var expected = "This is a normal link: Yahoobuga" ;
jQuery ( "<b>buga</b>" ) . insertAfter ( "#yahoo" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert String after" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: YahooTry them out:" ;
2011-04-12 08:47:46 +00:00
jQuery ( document . getElementById ( "first" ) ) . insertAfter ( "#yahoo" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert element after" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: YahooTry them out:diveintomark" ;
2011-04-12 08:47:46 +00:00
jQuery ( [ document . getElementById ( "first" ) , document . getElementById ( "mark" ) ] ) . insertAfter ( "#yahoo" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert array of elements after" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
expected = "This is a normal link: YahoodiveintomarkTry them out:" ;
2011-04-12 08:47:46 +00:00
jQuery ( "#mark, #first" ) . insertAfter ( "#yahoo" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert jQuery after" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 21:08:54 +00:00
var testReplaceWith = function ( val ) {
2012-03-30 15:56:11 +00:00
expect ( 22 ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . replaceWith ( val ( "<b id='replace'>buga</b>" ) ) ;
ok ( jQuery ( "#replace" ) [ 0 ] , "Replace element with string" ) ;
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after string" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . replaceWith ( val ( document . getElementById ( "first" ) ) ) ;
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with element" ) ;
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after element" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture" ) . append ( "<div id='bar'><div id='baz'</div></div>" ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#baz" ) . replaceWith ( "Baz" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#bar" ) . text ( ) , "Baz" , "Replace element with text" ) ;
2011-04-12 08:47:46 +00:00
ok ( ! jQuery ( "#baz" ) [ 0 ] , "Verify that original element is gone, after element" ) ;
2010-02-02 02:48:05 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . replaceWith ( val ( [ document . getElementById ( "first" ) , document . getElementById ( "mark" ) ] ) ) ;
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with array of elements" ) ;
ok ( jQuery ( "#mark" ) [ 0 ] , "Replace element with array of elements" ) ;
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after array of elements" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "#yahoo" ) . replaceWith ( val ( jQuery ( "#mark, #first" ) ) ) ;
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with set of elements" ) ;
ok ( jQuery ( "#mark" ) [ 0 ] , "Replace element with set of elements" ) ;
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after set of elements" ) ;
2009-09-14 22:09:42 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-11 20:57:45 +00:00
var tmp = jQuery ( "<div/>" ) . appendTo ( "body" ) . click ( function ( ) { ok ( true , "Newly bound click run." ) ; } ) ;
2011-04-12 08:47:46 +00:00
var y = jQuery ( "<div/>" ) . appendTo ( "body" ) . click ( function ( ) { ok ( true , "Previously bound click run." ) ; } ) ;
2010-01-11 21:08:39 +00:00
var child = y . append ( "<b>test</b>" ) . find ( "b" ) . click ( function ( ) { ok ( true , "Child bound click run." ) ; return false ; } ) ;
2010-01-11 20:57:45 +00:00
y . replaceWith ( tmp ) ;
2010-01-11 21:08:39 +00:00
2010-01-11 20:57:45 +00:00
tmp . click ( ) ;
2010-01-11 21:25:01 +00:00
y . click ( ) ; // Shouldn't be run
child . click ( ) ; // Shouldn't be run
2010-01-12 04:32:11 +00:00
tmp . remove ( ) ;
y . remove ( ) ;
child . remove ( ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-11 21:25:01 +00:00
2011-04-12 08:47:46 +00:00
y = jQuery ( "<div/>" ) . appendTo ( "body" ) . click ( function ( ) { ok ( true , "Previously bound click run." ) ; } ) ;
2010-01-11 21:25:01 +00:00
var child2 = y . append ( "<u>test</u>" ) . find ( "u" ) . click ( function ( ) { ok ( true , "Child 2 bound click run." ) ; return false ; } ) ;
y . replaceWith ( child2 ) ;
child2 . click ( ) ;
2010-01-11 20:57:45 +00:00
2010-01-12 04:32:11 +00:00
y . remove ( ) ;
child2 . remove ( ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-11 20:57:45 +00:00
2009-09-14 22:09:42 +00:00
var set = jQuery ( "<div/>" ) . replaceWith ( val ( "<span>test</span>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( set [ 0 ] . nodeName . toLowerCase ( ) , "span" , "Replace the disconnected node." ) ;
equal ( set . length , 1 , "Replace the disconnected node." ) ;
2011-03-05 15:59:25 +00:00
2012-03-30 15:56:11 +00:00
// #11338
ok ( jQuery ( "<div>1</div>" ) . replaceWith ( val ( "<span/>" ) ) . is ( "span" ) , "#11338, Make sure disconnected node with content is replaced" ) ;
2011-04-12 08:47:46 +00:00
var non _existant = jQuery ( "#does-not-exist" ) . replaceWith ( val ( "<b>should not throw an error</b>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( non _existant . length , 0 , "Length of non existant element." ) ;
2009-12-05 20:30:36 +00:00
var $div = jQuery ( "<div class='replacewith'></div>" ) . appendTo ( "body" ) ;
2010-01-12 04:32:11 +00:00
// TODO: Work on jQuery(...) inline script execution
//$div.replaceWith("<div class='replacewith'></div><script>" +
2011-11-06 20:27:42 +00:00
//"equal(jQuery('.replacewith').length, 1, 'Check number of elements in page.');" +
2010-01-12 04:32:11 +00:00
//"</script>");
2011-11-06 20:27:42 +00:00
equal ( jQuery ( ".replacewith" ) . length , 1 , "Check number of elements in page." ) ;
2011-04-12 08:47:46 +00:00
jQuery ( ".replacewith" ) . remove ( ) ;
2010-10-09 15:41:58 +00:00
QUnit . reset ( ) ;
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture" ) . append ( "<div id='replaceWith'></div>" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#qunit-fixture" ) . find ( "div[id=replaceWith]" ) . length , 1 , "Make sure only one div exists." ) ;
2010-10-09 15:41:58 +00:00
jQuery ( "#replaceWith" ) . replaceWith ( val ( "<div id='replaceWith'></div>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#qunit-fixture" ) . find ( "div[id=replaceWith]" ) . length , 1 , "Make sure only one div exists." ) ;
2010-10-09 15:41:58 +00:00
jQuery ( "#replaceWith" ) . replaceWith ( val ( "<div id='replaceWith'></div>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#qunit-fixture" ) . find ( "div[id=replaceWith]" ) . length , 1 , "Make sure only one div exists." ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 21:08:54 +00:00
test ( "replaceWith(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-07-05 19:52:13 +00:00
testReplaceWith ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 21:08:54 +00:00
test ( "replaceWith(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testReplaceWith ( manipulationFunctionReturningObj ) ;
2010-01-26 00:22:28 +00:00
2012-03-30 15:56:11 +00:00
expect ( 23 ) ;
2010-01-26 00:22:28 +00:00
var y = jQuery ( "#yahoo" ) [ 0 ] ;
jQuery ( y ) . replaceWith ( function ( ) {
2011-11-06 20:27:42 +00:00
equal ( this , y , "Make sure the context is coming in correctly." ) ;
2010-01-26 00:22:28 +00:00
} ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-02-02 02:53:31 +00:00
} ) ;
test ( "replaceWith(string) for more than one element" , function ( ) {
expect ( 3 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#foo p" ) . length , 3 , "ensuring that test data has not changed" ) ;
2010-02-02 02:53:31 +00:00
2011-04-12 08:47:46 +00:00
jQuery ( "#foo p" ) . replaceWith ( "<span>bar</span>" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#foo span" ) . length , 3 , "verify that all the three original element have been replaced" ) ;
equal ( jQuery ( "#foo p" ) . length , 0 , "verify that all the three original element have been replaced" ) ;
2010-02-02 02:53:31 +00:00
} ) ;
2009-07-12 21:08:54 +00:00
2009-03-18 21:15:38 +00:00
test ( "replaceAll(String|Element|Array<Element>|jQuery)" , function ( ) {
expect ( 10 ) ;
2011-04-12 08:47:46 +00:00
jQuery ( "<b id='replace'>buga</b>" ) . replaceAll ( "#yahoo" ) ;
ok ( jQuery ( "#replace" ) [ 0 ] , "Replace element with string" ) ;
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after string" ) ;
2009-07-21 09:17:33 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( document . getElementById ( "first" ) ) . replaceAll ( "#yahoo" ) ;
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with element" ) ;
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after element" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2011-04-12 08:47:46 +00:00
jQuery ( [ document . getElementById ( "first" ) , document . getElementById ( "mark" ) ] ) . replaceAll ( "#yahoo" ) ;
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with array of elements" ) ;
ok ( jQuery ( "#mark" ) [ 0 ] , "Replace element with array of elements" ) ;
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after array of elements" ) ;
2009-03-18 21:15:38 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-08-26 19:21:01 +00:00
jQuery ( "#mark, #first" ) . replaceAll ( "#yahoo" ) ;
2011-04-12 08:47:46 +00:00
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with set of elements" ) ;
ok ( jQuery ( "#mark" ) [ 0 ] , "Replace element with set of elements" ) ;
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after set of elements" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2011-01-21 16:08:15 +00:00
test ( "jQuery.clone() (#8017)" , function ( ) {
expect ( 2 ) ;
ok ( jQuery . clone && jQuery . isFunction ( jQuery . clone ) , "jQuery.clone() utility exists and is a function." ) ;
2011-04-17 06:43:57 +00:00
var main = jQuery ( "#qunit-fixture" ) [ 0 ] ,
2011-01-21 16:08:15 +00:00
clone = jQuery . clone ( main ) ;
2011-11-06 20:27:42 +00:00
equal ( main . childNodes . length , clone . childNodes . length , "Simple child length to ensure a large dom tree copies correctly" ) ;
2011-01-21 16:08:15 +00:00
} ) ;
2011-01-28 16:55:39 +00:00
test ( "clone() (#8070)" , function ( ) {
expect ( 2 ) ;
2011-04-17 06:43:57 +00:00
jQuery ( "<select class='test8070'></select><select class='test8070'></select>" ) . appendTo ( "#qunit-fixture" ) ;
2011-04-12 08:47:46 +00:00
var selects = jQuery ( ".test8070" ) ;
selects . append ( "<OPTION>1</OPTION><OPTION>2</OPTION>" ) ;
2011-01-28 16:55:39 +00:00
2011-11-06 20:27:42 +00:00
equal ( selects [ 0 ] . childNodes . length , 2 , "First select got two nodes" ) ;
equal ( selects [ 1 ] . childNodes . length , 2 , "Second select got two nodes" ) ;
2011-01-28 16:55:39 +00:00
selects . remove ( ) ;
} ) ;
2009-03-18 21:15:38 +00:00
test ( "clone()" , function ( ) {
2012-07-30 18:10:18 +00:00
expect ( 44 ) ;
2011-11-06 20:27:42 +00:00
equal ( "This is a normal link: Yahoo" , jQuery ( "#en" ) . text ( ) , "Assert text for #en" ) ;
2011-04-12 08:47:46 +00:00
var clone = jQuery ( "#yahoo" ) . clone ( ) ;
2011-11-06 20:27:42 +00:00
equal ( "Try them out:Yahoo" , jQuery ( "#first" ) . append ( clone ) . text ( ) , "Check for clone" ) ;
equal ( "This is a normal link: Yahoo" , jQuery ( "#en" ) . text ( ) , "Reassert text for #en" ) ;
2009-03-18 21:15:38 +00:00
var cloneTags = [
"<table/>" , "<tr/>" , "<td/>" , "<div/>" ,
"<button/>" , "<ul/>" , "<ol/>" , "<li/>" ,
"<input type='checkbox' />" , "<select/>" , "<option/>" , "<textarea/>" ,
"<tbody/>" , "<thead/>" , "<tfoot/>" , "<iframe/>"
] ;
for ( var i = 0 ; i < cloneTags . length ; i ++ ) {
var j = jQuery ( cloneTags [ i ] ) ;
2011-11-06 20:27:42 +00:00
equal ( j [ 0 ] . tagName , j . clone ( ) [ 0 ] . tagName , "Clone a " + cloneTags [ i ] ) ;
2009-03-18 21:15:38 +00:00
}
// using contents will get comments regular, text, and comment nodes
var cl = jQuery ( "#nonnodes" ) . contents ( ) . clone ( ) ;
ok ( cl . length >= 2 , "Check node,textnode,comment clone works (some browsers delete comments on clone)" ) ;
var div = jQuery ( "<div><ul><li>test</li></ul></div>" ) . click ( function ( ) {
ok ( true , "Bound event still exists." ) ;
} ) ;
2011-01-09 21:58:47 +00:00
clone = div . clone ( true ) ;
// manually clean up detached elements
div . remove ( ) ;
div = clone . clone ( true ) ;
// manually clean up detached elements
clone . remove ( ) ;
2011-11-06 20:27:42 +00:00
equal ( div . length , 1 , "One element cloned" ) ;
equal ( div [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "DIV element cloned" ) ;
2009-03-18 21:15:38 +00:00
div . trigger ( "click" ) ;
2011-01-09 21:58:47 +00:00
// manually clean up detached elements
div . remove ( ) ;
2009-03-18 21:15:38 +00:00
div = jQuery ( "<div/>" ) . append ( [ document . createElement ( "table" ) , document . createElement ( "table" ) ] ) ;
div . find ( "table" ) . click ( function ( ) {
ok ( true , "Bound event still exists." ) ;
} ) ;
2011-01-09 21:58:47 +00:00
clone = div . clone ( true ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . length , 1 , "One element cloned" ) ;
equal ( clone [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "DIV element cloned" ) ;
2011-01-09 21:58:47 +00:00
clone . find ( "table:last" ) . trigger ( "click" ) ;
// manually clean up detached elements
div . remove ( ) ;
clone . remove ( ) ;
2009-03-18 21:15:38 +00:00
2011-02-01 13:57:18 +00:00
var divEvt = jQuery ( "<div><ul><li>test</li></ul></div>" ) . click ( function ( ) {
ok ( false , "Bound event still exists after .clone()." ) ;
} ) ,
cloneEvt = divEvt . clone ( ) ;
// Make sure that doing .clone() doesn't clone events
cloneEvt . trigger ( "click" ) ;
cloneEvt . remove ( ) ;
divEvt . remove ( ) ;
2011-03-09 20:44:46 +00:00
// Test both html() and clone() for <embed and <object types
div = jQuery ( "<div/>" ) . html ( '<embed height="355" width="425" src="http://www.youtube.com/v/3KANI2dpXLw&hl=en"></embed>' ) ;
clone = div . clone ( true ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . length , 1 , "One element cloned" ) ;
equal ( clone . html ( ) , div . html ( ) , "Element contents cloned" ) ;
equal ( clone [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "DIV element cloned" ) ;
2011-03-09 20:44:46 +00:00
2010-12-12 08:20:31 +00:00
// this is technically an invalid object, but because of the special
// classid instantiation it is the only kind that IE has trouble with,
2010-12-12 19:37:00 +00:00
// so let's test with it too.
2011-04-12 08:47:46 +00:00
div = jQuery ( "<div/>" ) . html ( "<object height='355' width='425' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'> <param name='movie' value='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='wmode' value='transparent'> </object>" ) ;
2009-03-18 21:15:38 +00:00
2010-12-12 08:20:31 +00:00
clone = div . clone ( true ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . length , 1 , "One element cloned" ) ;
2012-07-30 18:10:18 +00:00
( function checkForAttributes ( $ ) {
// IE6/7 adds some extra parameters so just test for existance of a defined set
var parameters = [ "height" , "width" , "classid" ] ,
$divObject = div . find ( "object" ) ,
$cloneObject = clone . find ( "object" ) ;
$ . each ( parameters , function ( index , parameter ) {
equal ( $cloneObject . attr ( parameter ) , $divObject . attr ( parameter ) , "Element attributes cloned: " + parameter ) ;
} ) ;
} ) ( jQuery ) ;
( function checkForParams ( ) {
// IE6/7/8 adds a bunch of extram param elements so just test for those that are trying to clone
var params = { } ;
clone . find ( "param" ) . each ( function ( index , param ) {
params [ param . attributes . name . nodeValue . toLowerCase ( ) ] =
param . attributes . value . nodeValue . toLowerCase ( ) ;
} ) ;
div . find ( "param" ) . each ( function ( index , param ) {
var actualValue = params [ param . attributes . name . nodeValue . toLowerCase ( ) ] ,
expectedValue = param . attributes . value . nodeValue . toLowerCase ( ) ;
equal ( actualValue , expectedValue , "Param cloned: " + param . attributes . name . nodeValue ) ;
} ) ;
} ) ( ) ;
2011-11-06 20:27:42 +00:00
equal ( clone [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "DIV element cloned" ) ;
2010-12-12 08:20:31 +00:00
// and here's a valid one.
2011-04-12 08:47:46 +00:00
div = jQuery ( "<div/>" ) . html ( "<object height='355' width='425' type='application/x-shockwave-flash' data='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='movie' value='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='wmode' value='transparent'> </object>" ) ;
2010-12-12 08:20:31 +00:00
clone = div . clone ( true ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . length , 1 , "One element cloned" ) ;
equal ( clone . html ( ) , div . html ( ) , "Element contents cloned" ) ;
equal ( clone [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "DIV element cloned" ) ;
2009-12-09 21:28:58 +00:00
2012-07-05 19:52:13 +00:00
div = jQuery ( "<div/>" ) . data ( { "a" : true } ) ;
2011-01-09 21:58:47 +00:00
clone = div . clone ( true ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . data ( "a" ) , true , "Data cloned." ) ;
2011-01-09 21:58:47 +00:00
clone . data ( "a" , false ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . data ( "a" ) , false , "Ensure cloned element data object was correctly modified" ) ;
equal ( div . data ( "a" ) , true , "Ensure cloned element data object is copied, not referenced" ) ;
2010-02-02 02:26:47 +00:00
2011-01-09 21:58:47 +00:00
// manually clean up detached elements
div . remove ( ) ;
clone . remove ( ) ;
2010-02-02 02:26:47 +00:00
var form = document . createElement ( "form" ) ;
form . action = "/test/" ;
2012-06-21 19:30:24 +00:00
div = document . createElement ( "div" ) ;
2010-02-02 02:26:47 +00:00
div . appendChild ( document . createTextNode ( "test" ) ) ;
form . appendChild ( div ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( form ) . clone ( ) . children ( ) . length , 1 , "Make sure we just get the form back." ) ;
2010-11-21 00:58:46 +00:00
equal ( jQuery ( "body" ) . clone ( ) . children ( ) [ 0 ] . id , "qunit-header" , "Make sure cloning body works" ) ;
2011-01-10 00:38:44 +00:00
} ) ;
2012-02-17 19:17:20 +00:00
test ( "clone(script type=non-javascript) (#11359)" , function ( ) {
expect ( 3 ) ;
var src = jQuery ( "<script type='text/filler'>Lorem ipsum dolor sit amet</script><q><script type='text/filler'>consectetur adipiscing elit</script></q>" ) ;
var dest = src . clone ( ) ;
equal ( dest [ 0 ] . text , "Lorem ipsum dolor sit amet" , "Cloning preserves script text" ) ;
equal ( dest . last ( ) . html ( ) , src . last ( ) . html ( ) , "Cloning preserves nested script text" ) ;
ok ( /^\s*<scr.pt\s+type=['"]?text\/filler['"]?\s*>consectetur adipiscing elit<\/scr.pt>\s*$/i . test ( dest . last ( ) . html ( ) ) , "Cloning preserves nested script text" ) ;
} ) ;
2011-01-10 00:38:44 +00:00
test ( "clone(form element) (Bug #3879, #6655)" , function ( ) {
2011-03-08 17:07:05 +00:00
expect ( 5 ) ;
2012-06-21 19:30:24 +00:00
var clone ,
element = jQuery ( "<select><option>Foo</option><option selected>Bar</option></select>" ) ;
2011-01-10 00:38:44 +00:00
2011-11-06 20:27:42 +00:00
equal ( element . clone ( ) . find ( "option:selected" ) . val ( ) , element . find ( "option:selected" ) . val ( ) , "Selected option cloned correctly" ) ;
2011-01-10 00:38:44 +00:00
2011-04-12 08:47:46 +00:00
element = jQuery ( "<input type='checkbox' value='foo'>" ) . attr ( "checked" , "checked" ) ;
2011-01-10 00:38:44 +00:00
clone = element . clone ( ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . is ( ":checked" ) , element . is ( ":checked" ) , "Checked input cloned correctly" ) ;
equal ( clone [ 0 ] . defaultValue , "foo" , "Checked input defaultValue cloned correctly" ) ;
2011-05-11 12:12:19 +00:00
2011-03-08 17:07:05 +00:00
// defaultChecked also gets set now due to setAttribute in attr, is this check still valid?
2011-11-06 20:27:42 +00:00
// equal( clone[0].defaultChecked, !jQuery.support.noCloneChecked, "Checked input defaultChecked cloned correctly" );
2011-01-10 00:38:44 +00:00
element = jQuery ( "<input type='text' value='foo'>" ) ;
clone = element . clone ( ) ;
2011-11-06 20:27:42 +00:00
equal ( clone [ 0 ] . defaultValue , "foo" , "Text input defaultValue cloned correctly" ) ;
2011-01-10 00:38:44 +00:00
element = jQuery ( "<textarea>foo</textarea>" ) ;
clone = element . clone ( ) ;
2011-11-06 20:27:42 +00:00
equal ( clone [ 0 ] . defaultValue , "foo" , "Textarea defaultValue cloned correctly" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2011-02-01 22:54:02 +00:00
test ( "clone(multiple selected options) (Bug #8129)" , function ( ) {
expect ( 1 ) ;
var element = jQuery ( "<select><option>Foo</option><option selected>Bar</option><option selected>Baz</option></select>" ) ;
2011-11-06 20:27:42 +00:00
equal ( element . clone ( ) . find ( "option:selected" ) . length , element . find ( "option:selected" ) . length , "Multiple selected options cloned correctly" ) ;
2011-02-01 22:54:02 +00:00
} ) ;
2009-03-18 21:15:38 +00:00
test ( "clone() on XML nodes" , function ( ) {
expect ( 2 ) ;
2012-04-15 21:41:54 +00:00
var xml = createDashboardXML ( ) ;
var root = jQuery ( xml . documentElement ) . clone ( ) ;
var origTab = jQuery ( "tab" , xml ) . eq ( 0 ) ;
var cloneTab = jQuery ( "tab" , root ) . eq ( 0 ) ;
origTab . text ( "origval" ) ;
cloneTab . text ( "cloneval" ) ;
equal ( origTab . text ( ) , "origval" , "Check original XML node was correctly set" ) ;
equal ( cloneTab . text ( ) , "cloneval" , "Check cloned XML node was correctly set" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-02-10 01:48:21 +00:00
test ( "clone() on local XML nodes with html5 nodename" , function ( ) {
2012-02-10 21:17:12 +00:00
expect ( 2 ) ;
2012-02-10 01:48:21 +00:00
2012-02-10 21:17:12 +00:00
var $xmlDoc = jQuery ( jQuery . parseXML ( "<root><meter /></root>" ) ) ,
2012-02-10 01:48:21 +00:00
$meter = $xmlDoc . find ( "meter" ) . clone ( ) ;
2012-02-10 21:17:12 +00:00
equal ( $meter [ 0 ] . nodeName , "meter" , "Check if nodeName was not changed due to cloning" ) ;
equal ( $meter [ 0 ] . nodeType , 1 , "Check if nodeType is not changed due to cloning" ) ;
} ) ;
2012-02-10 01:48:21 +00:00
2011-12-06 20:25:38 +00:00
test ( "html(undefined)" , function ( ) {
expect ( 1 ) ;
equal ( jQuery ( "#foo" ) . html ( "<i>test</i>" ) . html ( undefined ) . html ( ) . toLowerCase ( ) , "<i>test</i>" , ".html(undefined) is chainable (#5571)" ) ;
} ) ;
2012-07-10 03:06:51 +00:00
test ( "html() on empty set" , function ( ) {
expect ( 1 ) ;
2012-07-11 01:44:03 +00:00
strictEqual ( jQuery ( ) . html ( ) , undefined , ".html() returns undefined for empty sets (#11962)" ) ;
2012-07-10 03:06:51 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
var testHtml = function ( valueObj ) {
2012-02-10 21:39:28 +00:00
expect ( 35 ) ;
2009-07-21 09:17:33 +00:00
2012-07-05 19:52:13 +00:00
jQuery [ "scriptorder" ] = 0 ;
2009-07-21 09:17:33 +00:00
2011-04-17 06:43:57 +00:00
var div = jQuery ( "#qunit-fixture > div" ) ;
2009-07-12 20:19:43 +00:00
div . html ( valueObj ( "<b>test</b>" ) ) ;
2009-03-18 21:15:38 +00:00
var pass = true ;
for ( var i = 0 ; i < div . size ( ) ; i ++ ) {
2012-06-21 19:30:24 +00:00
if ( div . get ( i ) . childNodes . length != 1 ) {
pass = false ;
}
2009-03-18 21:15:38 +00:00
}
ok ( pass , "Set HTML" ) ;
2009-07-21 09:17:33 +00:00
2011-04-12 08:47:46 +00:00
div = jQuery ( "<div/>" ) . html ( valueObj ( "<div id='parent_1'><div id='child_1'/></div><div id='parent_2'/>" ) ) ;
2010-01-25 02:37:05 +00:00
2011-11-06 20:27:42 +00:00
equal ( div . children ( ) . length , 2 , "Make sure two child nodes exist." ) ;
equal ( div . children ( ) . children ( ) . length , 1 , "Make sure that a grandchild exists." ) ;
2010-01-25 02:37:05 +00:00
2010-02-13 12:05:39 +00:00
var space = jQuery ( "<div/>" ) . html ( valueObj ( " " ) ) [ 0 ] . innerHTML ;
2010-09-27 14:28:35 +00:00
ok ( /^\xA0$|^ $/ . test ( space ) , "Make sure entities are passed through correctly." ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "<div/>" ) . html ( valueObj ( "&" ) ) [ 0 ] . innerHTML , "&" , "Make sure entities are passed through correctly." ) ;
2010-02-06 00:58:08 +00:00
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "<style>.foobar{color:green;}</style>" ) ) ;
2010-02-13 08:30:45 +00:00
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#qunit-fixture" ) . children ( ) . length , 1 , "Make sure there is a child element." ) ;
equal ( jQuery ( "#qunit-fixture" ) . children ( ) [ 0 ] . nodeName . toUpperCase ( ) , "STYLE" , "And that a style element was inserted." ) ;
2010-02-13 08:30:45 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-03-18 21:15:38 +00:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
2009-07-12 20:19:43 +00:00
j . html ( valueObj ( "<b>bold</b>" ) ) ;
2009-07-21 09:17:33 +00:00
2009-03-18 21:15:38 +00:00
// this is needed, or the expando added by jQuery unique will yield a different html
2011-04-12 08:47:46 +00:00
j . find ( "b" ) . removeData ( ) ;
2011-11-06 20:27:42 +00:00
equal ( j . html ( ) . replace ( / xmlns="[^"]+"/g , "" ) . toLowerCase ( ) , "<b>bold</b>" , "Check node,textnode,comment with html()" ) ;
2009-07-21 09:17:33 +00:00
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "<select/>" ) ) ;
jQuery ( "#qunit-fixture select" ) . html ( valueObj ( "<option>O1</option><option selected='selected'>O2</option><option>O3</option>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#qunit-fixture select" ) . val ( ) , "O2" , "Selected option correct" ) ;
2009-07-21 09:17:33 +00:00
2011-04-12 08:47:46 +00:00
var $div = jQuery ( "<div />" ) ;
2011-11-06 20:27:42 +00:00
equal ( $div . html ( valueObj ( 5 ) ) . html ( ) , "5" , "Setting a number as html" ) ;
equal ( $div . html ( valueObj ( 0 ) ) . html ( ) , "0" , "Setting a zero as html" ) ;
2009-07-21 09:17:33 +00:00
2011-04-12 08:47:46 +00:00
var $div2 = jQuery ( "<div/>" ) , insert = "<div>hello1</div>" ;
2011-11-06 20:27:42 +00:00
equal ( $div2 . html ( insert ) . html ( ) . replace ( />/g , ">" ) , insert , "Verify escaped insertion." ) ;
equal ( $div2 . html ( "x" + insert ) . html ( ) . replace ( />/g , ">" ) , "x" + insert , "Verify escaped insertion." ) ;
equal ( $div2 . html ( " " + insert ) . html ( ) . replace ( />/g , ">" ) , " " + insert , "Verify escaped insertion." ) ;
2009-11-11 19:23:56 +00:00
2009-12-07 01:26:39 +00:00
var map = jQuery ( "<map/>" ) . html ( valueObj ( "<area id='map01' shape='rect' coords='50,50,150,150' href='http://www.jquery.com/' alt='jQuery'>" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( map [ 0 ] . childNodes . length , 1 , "The area was inserted." ) ;
equal ( map [ 0 ] . firstChild . nodeName . toLowerCase ( ) , "area" , "The area was inserted." ) ;
2009-11-11 19:23:56 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-07-21 09:17:33 +00:00
2012-02-10 21:39:28 +00:00
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "<script type='something/else'>ok( false, 'Non-script evaluated.' );</script><script type='text/javascript'>ok( true, 'text/javascript is evaluated.' );</script><script>ok( true, 'No type is evaluated.' );</script><div><script type='text/javascript'>ok( true, 'Inner text/javascript is evaluated.' );</script><script>ok( true, 'Inner No type is evaluated.' );</script><script type='something/else'>ok( false, 'Non-script evaluated.' );</script><script type='type/ecmascript'>ok( true, 'type/ecmascript evaluated.' );</script></div>" ) ) ;
2009-07-21 09:17:33 +00:00
2011-04-17 06:43:57 +00:00
var child = jQuery ( "#qunit-fixture" ) . find ( "script" ) ;
2011-04-12 20:39:30 +00:00
2011-11-06 20:27:42 +00:00
equal ( child . length , 2 , "Make sure that two non-JavaScript script tags are left." ) ;
equal ( child [ 0 ] . type , "something/else" , "Verify type of script tag." ) ;
equal ( child [ 1 ] . type , "something/else" , "Verify type of script tag." ) ;
2009-07-21 09:17:33 +00:00
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "<script>ok( true, 'Test repeated injection of script.' );</script>" ) ) ;
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "<script>ok( true, 'Test repeated injection of script.' );</script>" ) ) ;
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "<script>ok( true, 'Test repeated injection of script.' );</script>" ) ) ;
2009-07-21 09:17:33 +00:00
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "<script type='text/javascript'>ok( true, 'jQuery().html().evalScripts() Evals Scripts Twice in Firefox, see #975 (1)' );</script>" ) ) ;
2009-07-21 09:17:33 +00:00
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "foo <form><script type='text/javascript'>ok( true, 'jQuery().html().evalScripts() Evals Scripts Twice in Firefox, see #975 (2)' );</script></form>" ) ) ;
2009-07-21 09:17:33 +00:00
2011-11-06 20:27:42 +00:00
jQuery ( "#qunit-fixture" ) . html ( valueObj ( "<script>equal(jQuery.scriptorder++, 0, 'Script is executed in order');equal(jQuery('#scriptorder').length, 1,'Execute after html (even though appears before)')<\/script><span id='scriptorder'><script>equal(jQuery.scriptorder++, 1, 'Script (nested) is executed in order');equal(jQuery('#scriptorder').length, 1,'Execute after html')<\/script></span><script>equal(jQuery.scriptorder++, 2, 'Script (unnested) is executed in order');equal(jQuery('#scriptorder').length, 1,'Execute after html')<\/script>" ) ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 20:19:43 +00:00
test ( "html(String)" , function ( ) {
2012-07-05 19:52:13 +00:00
testHtml ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
test ( "html(Function)" , function ( ) {
2012-07-05 19:52:13 +00:00
testHtml ( manipulationFunctionReturningObj ) ;
2010-09-28 16:50:44 +00:00
2012-02-10 21:39:28 +00:00
expect ( 37 ) ;
2010-09-28 16:50:44 +00:00
QUnit . reset ( ) ;
2011-04-17 06:43:57 +00:00
jQuery ( "#qunit-fixture" ) . html ( function ( ) {
2010-09-28 16:50:44 +00:00
return jQuery ( this ) . text ( ) ;
} ) ;
2011-04-17 06:43:57 +00:00
ok ( ! /</ . test ( jQuery ( "#qunit-fixture" ) . html ( ) ) , "Replace html with text." ) ;
ok ( jQuery ( "#qunit-fixture" ) . html ( ) . length > 0 , "Make sure text exists." ) ;
2009-12-10 04:57:19 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2010-01-07 18:34:16 +00:00
test ( "html(Function) with incoming value" , function ( ) {
expect ( 20 ) ;
2010-12-07 01:37:16 +00:00
2012-06-21 19:30:24 +00:00
var div = jQuery ( "#qunit-fixture > div" ) , old = div . map ( function ( ) { return jQuery ( this ) . html ( ) ; } ) ;
2010-12-07 01:37:16 +00:00
2010-01-07 18:34:16 +00:00
div . html ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old [ i ] , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return "<b>test</b>" ;
} ) ;
2010-12-07 01:37:16 +00:00
2010-01-07 18:34:16 +00:00
var pass = true ;
div . each ( function ( ) {
if ( this . childNodes . length !== 1 ) {
pass = false ;
}
2012-06-21 19:30:24 +00:00
} ) ;
2010-01-07 18:34:16 +00:00
ok ( pass , "Set HTML" ) ;
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2010-01-07 18:34:16 +00:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
old = j . map ( function ( ) { return jQuery ( this ) . html ( ) ; } ) ;
2010-12-07 01:37:16 +00:00
2010-01-07 18:34:16 +00:00
j . html ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val , old [ i ] , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return "<b>bold</b>" ;
} ) ;
2010-08-27 18:16:27 +00:00
// Handle the case where no comment is in the document
if ( j . length === 2 ) {
2011-11-06 20:27:42 +00:00
equal ( null , null , "Make sure the incoming value is correct." ) ;
2010-08-27 18:16:27 +00:00
}
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
j . find ( "b" ) . removeData ( ) ;
2011-11-06 20:27:42 +00:00
equal ( j . html ( ) . replace ( / xmlns="[^"]+"/g , "" ) . toLowerCase ( ) , "<b>bold</b>" , "Check node,textnode,comment with html()" ) ;
2010-12-07 01:37:16 +00:00
2011-04-12 08:47:46 +00:00
var $div = jQuery ( "<div />" ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( $div . html ( function ( i , val ) {
equal ( val , "" , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return 5 ;
2011-04-12 08:47:46 +00:00
} ) . html ( ) , "5" , "Setting a number as html" ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( $div . html ( function ( i , val ) {
equal ( val , "5" , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return 0 ;
2011-04-12 08:47:46 +00:00
} ) . html ( ) , "0" , "Setting a zero as html" ) ;
2010-01-07 18:34:16 +00:00
2011-04-12 08:47:46 +00:00
var $div2 = jQuery ( "<div/>" ) , insert = "<div>hello1</div>" ;
2011-11-06 20:27:42 +00:00
equal ( $div2 . html ( function ( i , val ) {
equal ( val , "" , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return insert ;
2010-01-13 20:23:05 +00:00
} ) . html ( ) . replace ( />/g , ">" ) , insert , "Verify escaped insertion." ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( $div2 . html ( function ( i , val ) {
equal ( val . replace ( />/g , ">" ) , insert , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return "x" + insert ;
2010-01-13 20:23:05 +00:00
} ) . html ( ) . replace ( />/g , ">" ) , "x" + insert , "Verify escaped insertion." ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( $div2 . html ( function ( i , val ) {
equal ( val . replace ( />/g , ">" ) , "x" + insert , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return " " + insert ;
2010-12-07 01:37:16 +00:00
} ) . html ( ) . replace ( />/g , ">" ) , " " + insert , "Verify escaped insertion." ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2009-07-21 09:17:33 +00:00
var testRemove = function ( method ) {
expect ( 9 ) ;
2012-06-21 19:30:24 +00:00
var cleanUp , count ,
first = jQuery ( "#ap" ) . children ( ":first" ) ;
2009-07-21 09:17:33 +00:00
first . data ( "foo" , "bar" ) ;
jQuery ( "#ap" ) . children ( ) [ method ] ( ) ;
2009-03-18 21:15:38 +00:00
ok ( jQuery ( "#ap" ) . text ( ) . length > 10 , "Check text is not removed" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#ap" ) . children ( ) . length , 0 , "Check remove" ) ;
2009-03-18 21:15:38 +00:00
2011-11-06 20:27:42 +00:00
equal ( first . data ( "foo" ) , method == "remove" ? null : "bar" ) ;
2009-07-21 09:17:33 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-07-21 09:17:33 +00:00
jQuery ( "#ap" ) . children ( ) [ method ] ( "a" ) ;
2009-03-18 21:15:38 +00:00
ok ( jQuery ( "#ap" ) . text ( ) . length > 10 , "Check text is not removed" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#ap" ) . children ( ) . length , 1 , "Check filtered remove" ) ;
2009-03-18 21:15:38 +00:00
2009-07-21 09:17:33 +00:00
jQuery ( "#ap" ) . children ( ) [ method ] ( "a, code" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#ap" ) . children ( ) . length , 0 , "Check multi-filtered remove" ) ;
2009-03-18 21:15:38 +00:00
// using contents will get comments regular, text, and comment nodes
2010-08-27 18:16:27 +00:00
// Handle the case where no comment is in the document
ok ( jQuery ( "#nonnodes" ) . contents ( ) . length >= 2 , "Check node,textnode,comment remove works" ) ;
2009-07-21 09:17:33 +00:00
jQuery ( "#nonnodes" ) . contents ( ) [ method ] ( ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#nonnodes" ) . contents ( ) . length , 0 , "Check node,textnode,comment remove works" ) ;
2009-07-21 09:17:33 +00:00
2011-01-09 21:58:47 +00:00
// manually clean up detached elements
if ( method === "detach" ) {
first . remove ( ) ;
}
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2009-07-21 09:17:33 +00:00
2012-06-21 19:30:24 +00:00
count = 0 ;
first = jQuery ( "#ap" ) . children ( ":first" ) ;
cleanUp = first . click ( function ( ) { count ++ ; } ) [ method ] ( ) . appendTo ( "#qunit-fixture" ) . click ( ) ;
2010-12-07 01:37:16 +00:00
2011-11-06 20:27:42 +00:00
equal ( method == "remove" ? 0 : 1 , count ) ;
2010-12-07 01:37:16 +00:00
2011-01-09 21:58:47 +00:00
// manually clean up detached elements
cleanUp . remove ( ) ;
2009-07-21 09:17:33 +00:00
} ;
test ( "remove()" , function ( ) {
testRemove ( "remove" ) ;
} ) ;
test ( "detach()" , function ( ) {
testRemove ( "detach" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
test ( "empty()" , function ( ) {
expect ( 3 ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#ap" ) . children ( ) . empty ( ) . text ( ) . length , 0 , "Check text is removed" ) ;
equal ( jQuery ( "#ap" ) . children ( ) . length , 4 , "Check elements are not removed" ) ;
2009-03-18 21:15:38 +00:00
// using contents will get comments regular, text, and comment nodes
var j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . empty ( ) ;
2011-11-06 20:27:42 +00:00
equal ( j . html ( ) , "" , "Check node,textnode,comment empty works" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2010-01-24 02:20:19 +00:00
test ( "jQuery.cleanData" , function ( ) {
2010-01-25 20:18:51 +00:00
expect ( 14 ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
var type , pos , div , child ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
type = "remove" ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
// Should trigger 4 remove event
div = getDiv ( ) . remove ( ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
// Should both do nothing
pos = "Outer" ;
div . trigger ( "click" ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
pos = "Inner" ;
div . children ( ) . trigger ( "click" ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
type = "empty" ;
div = getDiv ( ) ;
child = div . children ( ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
// Should trigger 2 remove event
div . empty ( ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
// Should trigger 1
pos = "Outer" ;
div . trigger ( "click" ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
// Should do nothing
pos = "Inner" ;
child . trigger ( "click" ) ;
2010-01-25 20:18:51 +00:00
// Should trigger 2
div . remove ( ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
type = "html" ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
div = getDiv ( ) ;
child = div . children ( ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
// Should trigger 2 remove event
div . html ( "<div></div>" ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
// Should trigger 1
pos = "Outer" ;
div . trigger ( "click" ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
// Should do nothing
pos = "Inner" ;
child . trigger ( "click" ) ;
2010-01-25 20:18:51 +00:00
// Should trigger 2
div . remove ( ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
function getDiv ( ) {
var div = jQuery ( "<div class='outer'><div class='inner'></div></div>" ) . click ( function ( ) {
ok ( true , type + " " + pos + " Click event fired." ) ;
} ) . focus ( function ( ) {
ok ( true , type + " " + pos + " Focus event fired." ) ;
} ) . find ( "div" ) . click ( function ( ) {
ok ( false , type + " " + pos + " Click event fired." ) ;
} ) . focus ( function ( ) {
ok ( false , type + " " + pos + " Focus event fired." ) ;
} ) . end ( ) . appendTo ( "body" ) ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
div [ 0 ] . detachEvent = div [ 0 ] . removeEventListener = function ( t ) {
ok ( true , type + " Outer " + t + " event unbound" ) ;
} ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
div [ 0 ] . firstChild . detachEvent = div [ 0 ] . firstChild . removeEventListener = function ( t ) {
ok ( true , type + " Inner " + t + " event unbound" ) ;
} ;
2010-12-07 01:37:16 +00:00
2010-01-24 02:20:19 +00:00
return div ;
}
2010-01-25 02:37:05 +00:00
} ) ;
2010-12-27 19:43:52 +00:00
test ( "jQuery.buildFragment - no plain-text caching (Bug #6779)" , function ( ) {
expect ( 1 ) ;
// DOM manipulation fails if added text matches an Object method
2011-04-17 06:43:57 +00:00
var $f = jQuery ( "<div />" ) . appendTo ( "#qunit-fixture" ) ,
2010-12-27 19:43:52 +00:00
bad = [ "start-" , "toString" , "hasOwnProperty" , "append" , "here&there!" , "-end" ] ;
for ( var i = 0 ; i < bad . length ; i ++ ) {
try {
$f . append ( bad [ i ] ) ;
}
catch ( e ) { }
}
2011-11-06 20:27:42 +00:00
equal ( $f . text ( ) , bad . join ( "" ) , "Cached strings that match Object properties" ) ;
2010-12-27 19:43:52 +00:00
$f . remove ( ) ;
} ) ;
2011-05-11 12:12:19 +00:00
test ( "jQuery.html - execute scripts escaped with html comment or CDATA (#9221)" , function ( ) {
2011-05-11 15:43:37 +00:00
expect ( 3 ) ;
2011-05-11 12:12:19 +00:00
jQuery ( [
2012-06-21 19:30:24 +00:00
'<script type="text/javascript">' ,
'<!--' ,
'ok( true, "<!-- handled" );' ,
'//-->' ,
'</script>'
] . join ( "\n" ) ) . appendTo ( "#qunit-fixture" ) ;
2011-05-11 12:12:19 +00:00
jQuery ( [
2012-06-21 19:30:24 +00:00
'<script type="text/javascript">' ,
'<![CDATA[' ,
'ok( true, "<![CDATA[ handled" );' ,
'//]]>' ,
'</script>'
] . join ( "\n" ) ) . appendTo ( "#qunit-fixture" ) ;
2011-05-11 15:43:37 +00:00
jQuery ( [
2012-06-21 19:30:24 +00:00
'<script type="text/javascript">' ,
'<!--//--><![CDATA[//><!--' ,
'ok( true, "<!--//--><![CDATA[//><!-- (Drupal case) handled" );' ,
'//--><!]]>' ,
'</script>'
] . join ( "\n" ) ) . appendTo ( "#qunit-fixture" ) ;
2011-05-11 12:12:19 +00:00
} ) ;
2011-05-13 16:26:17 +00:00
2011-04-30 14:42:36 +00:00
test ( "jQuery.buildFragment - plain objects are not a document #8950" , function ( ) {
expect ( 1 ) ;
try {
jQuery ( '<input type="hidden">' , { } ) ;
ok ( true , "Does not allow attribute object to be treated like a doc object" ) ;
} catch ( e ) { }
2011-05-13 16:26:17 +00:00
2011-04-30 14:42:36 +00:00
} ) ;
2011-06-15 15:14:52 +00:00
test ( "jQuery.clone - no exceptions for object elements #9587" , function ( ) {
expect ( 1 ) ;
try {
jQuery ( "#no-clone-exception" ) . clone ( ) ;
ok ( true , "cloned with no exceptions" ) ;
} catch ( e ) {
ok ( false , e . message ) ;
}
} ) ;
2011-11-08 02:22:04 +00:00
test ( "jQuery(<tag>) & wrap[Inner/All]() handle unknown elems (#10667)" , function ( ) {
expect ( 2 ) ;
var $wraptarget = jQuery ( "<div id='wrap-target'>Target</div>" ) . appendTo ( "#qunit-fixture" ) ,
$section = jQuery ( "<section>" ) . appendTo ( "#qunit-fixture" ) ;
$wraptarget . wrapAll ( "<aside style='background-color:green'></aside>" ) ;
2012-06-11 01:54:16 +00:00
notEqual ( $wraptarget . parent ( "aside" ) . get ( 0 ) . style . backgroundColor , "transparent" , "HTML5 elements created with wrapAll inherit styles" ) ;
notEqual ( $section . get ( 0 ) . style . backgroundColor , "transparent" , "HTML5 elements create with jQuery( string ) inherit styles" ) ;
2011-11-08 02:22:04 +00:00
} ) ;
test ( "Cloned, detached HTML5 elems (#10667,10670)" , function ( ) {
expect ( 7 ) ;
var $section = jQuery ( "<section>" ) . appendTo ( "#qunit-fixture" ) ,
$clone ;
// First clone
$clone = $section . clone ( ) ;
// Infer that the test is being run in IE<=8
if ( $clone [ 0 ] . outerHTML && ! jQuery . support . opacity ) {
// This branch tests cloning nodes by reading the outerHTML, used only in IE<=8
equal ( $clone [ 0 ] . outerHTML , "<section></section>" , "detached clone outerHTML matches '<section></section>'" ) ;
} else {
// This branch tests a known behaviour in modern browsers that should never fail.
// Included for expected test count symmetry (expecting 1)
equal ( $clone [ 0 ] . nodeName , "SECTION" , "detached clone nodeName matches 'SECTION' in modern browsers" ) ;
}
// Bind an event
$section . bind ( "click" , function ( event ) {
ok ( true , "clone fired event" ) ;
} ) ;
// Second clone (will have an event bound)
$clone = $section . clone ( true ) ;
// Trigger an event from the first clone
$clone . trigger ( "click" ) ;
$clone . unbind ( "click" ) ;
// Add a child node with text to the original
$section . append ( "<p>Hello</p>" ) ;
// Third clone (will have child node and text)
$clone = $section . clone ( true ) ;
equal ( $clone . find ( "p" ) . text ( ) , "Hello" , "Assert text in child of clone" ) ;
// Trigger an event from the third clone
$clone . trigger ( "click" ) ;
$clone . unbind ( "click" ) ;
// Add attributes to copy
$section . attr ( {
"class" : "foo bar baz" ,
"title" : "This is a title"
} ) ;
// Fourth clone (will have newly added attributes)
$clone = $section . clone ( true ) ;
equal ( $clone . attr ( "class" ) , $section . attr ( "class" ) , "clone and element have same class attribute" ) ;
equal ( $clone . attr ( "title" ) , $section . attr ( "title" ) , "clone and element have same title attribute" ) ;
// Remove the original
$section . remove ( ) ;
// Clone the clone
$section = $clone . clone ( true ) ;
// Remove the clone
$clone . remove ( ) ;
// Trigger an event from the clone of the clone
$section . trigger ( "click" ) ;
// Unbind any remaining events
$section . unbind ( "click" ) ;
$clone . unbind ( "click" ) ;
} ) ;
2011-11-08 05:05:33 +00:00
2011-11-06 03:04:09 +00:00
test ( "jQuery.fragments cache expectations" , function ( ) {
expect ( 10 ) ;
jQuery . fragments = { } ;
function fragmentCacheSize ( ) {
var n = 0 , c ;
for ( c in jQuery . fragments ) {
n ++ ;
}
return n ;
}
jQuery ( "<li></li>" ) ;
jQuery ( "<li>?</li>" ) ;
jQuery ( "<li>whip</li>" ) ;
jQuery ( "<li>it</li>" ) ;
jQuery ( "<li>good</li>" ) ;
jQuery ( "<div></div>" ) ;
jQuery ( "<div><div><span></span></div></div>" ) ;
jQuery ( "<tr><td></td></tr>" ) ;
jQuery ( "<tr><td></tr>" ) ;
jQuery ( "<li>aaa</li>" ) ;
jQuery ( "<ul><li>?</li></ul>" ) ;
jQuery ( "<div><p>arf</p>nnn</div>" ) ;
jQuery ( "<div><p>dog</p>?</div>" ) ;
jQuery ( "<span><span>" ) ;
equal ( fragmentCacheSize ( ) , 12 , "12 entries exist in jQuery.fragments, 1" ) ;
jQuery . each ( [
"<tr><td></td></tr>" ,
"<ul><li>?</li></ul>" ,
"<div><p>dog</p>?</div>" ,
"<span><span>"
] , function ( i , frag ) {
jQuery ( frag ) ;
equal ( jQuery . fragments [ frag ] . nodeType , 11 , "Second call with " + frag + " creates a cached DocumentFragment, has nodeType 11" ) ;
ok ( jQuery . fragments [ frag ] . childNodes . length , "Second call with " + frag + " creates a cached DocumentFragment, has childNodes with length" ) ;
} ) ;
equal ( fragmentCacheSize ( ) , 12 , "12 entries exist in jQuery.fragments, 2" ) ;
2011-11-08 05:05:33 +00:00
} ) ;
2012-03-06 15:22:58 +00:00
test ( "Guard against exceptions when clearing safeChildNodes" , function ( ) {
expect ( 1 ) ;
var div ;
try {
div = jQuery ( "<div/><hr/><code/><b/>" ) ;
} catch ( e ) { }
ok ( div && div . jquery , "Created nodes safely, guarded against exceptions on safeChildNodes[ -1 ]" ) ;
2012-03-23 15:31:05 +00:00
} ) ;
2012-04-17 01:57:41 +00:00
test ( "Ensure oldIE creates a new set on appendTo (#8894)" , function ( ) {
2012-10-15 16:19:20 +00:00
expect ( 5 ) ;
2012-04-17 01:57:41 +00:00
strictEqual ( jQuery ( "<div/>" ) . clone ( ) . addClass ( "test" ) . appendTo ( "<div/>" ) . end ( ) . hasClass ( "test" ) , false , "Check jQuery.fn.appendTo after jQuery.clone" ) ;
strictEqual ( jQuery ( "<div/>" ) . find ( "p" ) . end ( ) . addClass ( "test" ) . appendTo ( "<div/>" ) . end ( ) . hasClass ( "test" ) , false , "Check jQuery.fn.appendTo after jQuery.fn.find" ) ;
strictEqual ( jQuery ( "<div/>" ) . text ( "test" ) . addClass ( "test" ) . appendTo ( "<div/>" ) . end ( ) . hasClass ( "test" ) , false , "Check jQuery.fn.appendTo after jQuery.fn.text" ) ;
strictEqual ( jQuery ( "<bdi/>" ) . clone ( ) . addClass ( "test" ) . appendTo ( "<div/>" ) . end ( ) . hasClass ( "test" ) , false , "Check jQuery.fn.appendTo after clone html5 element" ) ;
strictEqual ( jQuery ( "<p/>" ) . appendTo ( "<div/>" ) . end ( ) . length , jQuery ( "<p>test</p>" ) . appendTo ( "<div/>" ) . end ( ) . length , "Elements created with createElement and with createDocumentFragment should be treated alike" ) ;
} ) ;
2012-05-31 15:31:13 +00:00
test ( "html() - script exceptions bubble (#11743)" , function ( ) {
expect ( 2 ) ;
raises ( function ( ) {
jQuery ( "#qunit-fixture" ) . html ( "<script>undefined(); ok( false, 'error not thrown' );</script>" ) ;
ok ( false , "error ignored" ) ;
} , "exception bubbled from inline script" ) ;
raises ( function ( ) {
2012-06-12 02:35:04 +00:00
jQuery ( "#qunit-fixture" ) . html ( "<script src='data/badcall.js'></script>" ) ;
2012-05-31 15:31:13 +00:00
ok ( false , "error ignored" ) ;
} , "exception bubbled from remote script" ) ;
} ) ;
2012-07-26 02:23:24 +00:00
test ( "checked state is cloned with clone()" , function ( ) {
expect ( 2 ) ;
var elem = jQuery . parseHTML ( "<input type='checkbox' checked='checked'/>" ) [ 0 ] ;
elem . checked = false ;
equal ( jQuery ( elem ) . clone ( ) . attr ( "id" , "clone" ) [ 0 ] . checked , false , "Checked false state correctly cloned" ) ;
elem = jQuery . parseHTML ( "<input type='checkbox'/>" ) [ 0 ] ;
elem . checked = true ;
equal ( jQuery ( elem ) . clone ( ) . attr ( "id" , "clone" ) [ 0 ] . checked , true , "Checked true state correctly cloned" ) ;
} ) ;
2012-08-23 01:23:50 +00:00
2012-08-28 21:00:12 +00:00
test ( "manipulate mixed jQuery and text (#12384, #12346)" , function ( ) {
expect ( 2 ) ;
var div = jQuery ( "<div>a</div>" ) . append ( " " , jQuery ( "<span>b</span>" ) , " " , jQuery ( "<span>c</span>" ) ) ,
nbsp = String . fromCharCode ( 160 ) ;
equal ( div . text ( ) , "a" + nbsp + "b" + nbsp + "c" , "Appending mixed jQuery with text nodes" ) ;
div = jQuery ( "<div><div></div></div>" )
. find ( "div" )
. after ( "<p>a</p>" , "<p>b</p>" )
. parent ( ) ;
equal ( div . find ( "*" ) . length , 3 , "added 2 paragraphs after inner div" ) ;
} ) ;
2012-08-23 01:23:50 +00:00
testIframeWithCallback ( "buildFragment works even if document[0] is iframe's window object in IE9/10 (#12266)" , "manipulation/iframe-denied.html" , function ( test ) {
expect ( 1 ) ;
ok ( test . status , test . description ) ;
} ) ;