2012-12-04 18:21: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
2012-12-04 18:21:47 +00:00
Array . prototype . arrayProtoFn = function ( arg ) {
throw ( "arrayProtoFn should not be called" ) ;
} ;
2010-12-21 03:23:59 +00:00
2012-12-04 18:21:47 +00:00
var manipulationBareObj = function ( value ) {
return value ;
} ;
2009-07-12 20:19:43 +00:00
2012-12-04 18:21:47 +00:00
var manipulationFunctionReturningObj = function ( value ) {
return ( function ( ) {
return value ;
} ) ;
} ;
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
* /
2012-12-04 18:21:47 +00:00
test ( "text()" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 5 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var expected , frag , $newLineTest ;
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
2013-02-27 20:44:34 +00:00
equal ( jQuery ( document . createTextNode ( "foo" ) ) . text ( ) , "foo" , "Text node was retrieved from .text()." ) ;
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +00:00
frag = document . createDocumentFragment ( ) ;
frag . appendChild ( document . createTextNode ( "foo" ) ) ;
2012-01-20 21:47:49 +00:00
2013-02-27 20:44:34 +00:00
equal ( jQuery ( frag ) . text ( ) , "foo" , "Document Fragment Text node was retrieved from .text()." ) ;
2012-03-30 21:09:46 +00:00
2012-12-04 18:21:47 +00:00
$newLineTest = jQuery ( "<div>test<br/>testy</div>" ) . appendTo ( "#moretests" ) ;
2012-03-30 21:09:46 +00:00
$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
} ) ;
2012-12-04 18:21:47 +00:00
test ( "text(undefined)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 1 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
equal ( jQuery ( "#foo" ) . text ( "<div" ) . text ( undefined ) [ 0 ] . innerHTML , "<div" , ".text(undefined) is chainable (#5571)" ) ;
2011-12-06 20:25:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
var testText = function ( valueObj ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 4 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var val , j ;
val = valueObj ( "<div><b>Hello</b> cruel world!</div>" ) ;
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
2012-12-04 18:21:47 +00:00
j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . text ( valueObj ( "hi!" ) ) ;
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
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +00:00
test ( "text(String)" , function ( ) {
testText ( manipulationBareObj ) ;
2010-01-07 16:51:48 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "text(Function)" , function ( ) {
testText ( manipulationFunctionReturningObj ) ;
2010-01-07 16:51:48 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "text(Function) with incoming value" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
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
2012-12-04 18:21:47 +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-01-07 16:51:48 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
var testWrap = function ( val ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 19 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var defaultText , result , j , i , cacheLength ;
defaultText = "Try them out:" ,
result = jQuery ( "#first" ) . wrap ( val ( "<div class='red'><span></span></div>" ) ) . text ( ) ;
2012-12-05 02:50:22 +00:00
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 ( ) ;
2012-12-04 18:21:47 +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 ( ) ;
2013-01-27 04:48:59 +00:00
jQuery ( "#check1" ) . on ( "click" , function ( ) {
2009-03-18 21:15:38 +00:00
var checkbox = this ;
2012-12-05 02:50:22 +00:00
2009-03-18 21:15:38 +00:00
ok ( checkbox . checked , "Checkbox's state is erased after wrap() action, see #769" ) ;
2012-12-04 18:21:47 +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" ) ;
2012-12-04 18:21:47 +00:00
} ) . prop ( "checked" , false ) [ 0 ] . click ( ) ;
2009-03-18 21:15:38 +00:00
// using contents will get comments regular, text, and comment nodes
2012-12-04 18:21:47 +00:00
j = jQuery ( "#nonnodes" ) . contents ( ) ;
j . wrap ( val ( "<i></i>" ) ) ;
2010-08-26 19:36:44 +00:00
// Blackberry 4.6 doesn't maintain comments in the DOM
2012-12-04 18:21:47 +00:00
equal ( jQuery ( "#nonnodes > i" ) . length , jQuery ( "#nonnodes" ) [ 0 ] . childNodes . length , "Check node,textnode,comment wraps ok" ) ;
2011-11-06 20:27:42 +00:00
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
2012-12-04 18:21:47 +00:00
cacheLength = 0 ;
for ( i in jQuery . cache ) {
2010-12-19 21:33:53 +00:00
cacheLength ++ ;
}
2012-12-04 18:21:47 +00:00
j = jQuery ( "<label/>" ) . wrap ( val ( "<li/>" ) ) ;
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
2012-12-04 18:21:47 +00:00
for ( i in jQuery . cache ) {
2010-12-19 21:33:53 +00:00
cacheLength -- ;
}
2012-12-04 18:21:47 +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>" ) ;
2012-12-04 18:21:47 +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>" ) ;
2012-12-04 18:21:47 +00:00
equal ( j [ 0 ] . parentNode . parentNode . childNodes . length , 1 , "There should only be one element wrapping." ) ;
2011-11-06 20:27:42 +00:00
equal ( j . length , 1 , "There should only be one element (no cloning)." ) ;
2012-12-04 18:21:47 +00:00
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
2012-12-04 18:21:47 +00:00
j = jQuery ( "<span/>" ) . wrap ( jQuery ( "<div></div>" ) ) ;
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
2013-01-27 04:48:59 +00:00
result = jQuery ( "<div></div>" ) . on ( "click" , function ( ) {
2012-12-04 18:21:47 +00:00
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
} ) ;
2012-12-04 18:21:47 +00:00
j = jQuery ( "<span/>" ) . wrap ( result ) ;
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
2012-12-04 18:21:47 +00:00
test ( "wrap(String|Element)" , function ( ) {
testWrap ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "wrap(Function)" , function ( ) {
testWrap ( manipulationFunctionReturningObj ) ;
2011-11-06 21:59:41 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "wrap(Function) with index (#10177)" , function ( ) {
2011-11-06 21:59:41 +00:00
var expectedIndex = 0 ,
2012-12-04 18:21:47 +00:00
targets = jQuery ( "#qunit-fixture p" ) ;
2011-11-06 21:59:41 +00:00
2012-12-04 18:21:47 +00:00
expect ( targets . length ) ;
2011-11-06 21:59:41 +00:00
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>" ;
} ) ;
} ) ;
2012-12-04 18:21:47 +00:00
test ( "wrap(String) consecutive elements (#10177)" , function ( ) {
2011-11-06 21:59:41 +00:00
var targets = jQuery ( "#qunit-fixture p" ) ;
2012-12-04 18:21:47 +00:00
expect ( targets . length * 2 ) ;
2011-11-06 21:59:41 +00:00
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
2012-10-16 14:17:14 +00:00
ok ( $this . parent ( ) . is ( ".wrapper" ) , "Check each elements parent is correct (.wrapper)" ) ;
2011-11-06 21:59:41 +00:00
equal ( $this . siblings ( ) . length , 0 , "Each element should be wrapped individually" ) ;
} ) ;
} ) ;
2009-07-12 21:08:54 +00:00
2012-12-04 18:21:47 +00:00
var testWrapAll = function ( val ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 8 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var prev , p , result ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
prev = jQuery ( "#firstp" ) [ 0 ] . previousSibling ;
p = jQuery ( "#firstp,#first" ) [ 0 ] . parentNode ;
result = jQuery ( "#firstp,#first" ) . wrapAll ( val ( "<div class='red'><div class='tmp'></div></div>" ) ) ;
2012-12-05 02:50:22 +00:00
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'" ) ;
2012-12-04 18:21:47 +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-12-04 18:21:47 +00:00
prev = jQuery ( "#firstp" ) [ 0 ] . previousSibling ;
p = jQuery ( "#first" ) [ 0 ] . parentNode ;
result = jQuery ( "#firstp,#first" ) . wrapAll ( val ( document . getElementById ( "empty" ) ) ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +00:00
test ( "wrapAll(String|Element)" , function ( ) {
testWrapAll ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
var testWrapInner = function ( val ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 11 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var num , result ;
num = jQuery ( "#first" ) . children ( ) . length ;
result = jQuery ( "#first" ) . wrapInner ( val ( "<div class='red'><div id='tmp'></div></div>" ) ) ;
2012-12-05 02:50:22 +00:00
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 ;
2012-12-04 18:21:47 +00:00
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 ;
2012-12-04 18:21:47 +00:00
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/>" ) ;
2012-12-04 18:21:47 +00:00
div . wrapInner ( val ( "<span></span>" ) ) ;
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
2012-12-04 18:21:47 +00:00
test ( "wrapInner(String|Element)" , function ( ) {
testWrapInner ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "wrapInner(Function)" , function ( ) {
testWrapInner ( manipulationFunctionReturningObj ) ;
2010-01-26 00:16:23 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2012-12-04 18:21:47 +00:00
test ( "unwrap()" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 9 ) ;
2009-09-25 21:41:21 +00:00
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
2013-02-19 04:52:29 +00:00
equal ( jQuery ( "#unwrap1 span" ) . add ( "#unwrap2 span:first-child" ) . unwrap ( ) . length , 3 , "make #unwrap1 and #unwrap2 go away" ) ;
2011-11-06 20:27:42 +00:00
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-12-04 18:21:47 +00:00
var testAppendForObject = function ( valueObj , isFragment ) {
2012-11-08 15:05:10 +00:00
var $base ,
type = isFragment ? " (DocumentFragment)" : " (Element)" ,
text = "This link has class=\"blog\": Simon Willison's Weblog" ,
el = document . getElementById ( "sap" ) . cloneNode ( true ) ,
first = document . getElementById ( "first" ) ,
yahoo = document . getElementById ( "yahoo" ) ;
if ( isFragment ) {
$base = document . createDocumentFragment ( ) ;
jQuery ( el ) . contents ( ) . each ( function ( ) {
$base . appendChild ( this ) ;
} ) ;
$base = jQuery ( $base ) ;
} else {
$base = jQuery ( el ) ;
}
2009-03-18 21:15:38 +00:00
2012-12-04 18:21:47 +00:00
equal ( $base . clone ( ) . append ( valueObj ( first . cloneNode ( true ) ) ) . text ( ) ,
2012-11-08 15:05:10 +00:00
text + "Try them out:" ,
"Check for appending of element" + type
) ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
equal ( $base . clone ( ) . append ( valueObj ( [ first . cloneNode ( true ) , yahoo . cloneNode ( true ) ] ) ) . text ( ) ,
text + "Try them out:Yahoo" ,
"Check for appending of array of elements" + type
) ;
2012-06-16 01:37:01 +00:00
2012-12-04 18:21:47 +00:00
equal ( $base . clone ( ) . append ( valueObj ( jQuery ( "#yahoo, #first" ) . clone ( ) ) ) . text ( ) ,
2012-11-08 15:05:10 +00:00
text + "YahooTry them out:" ,
"Check for appending of jQuery object" + type
) ;
2012-06-16 01:37:01 +00:00
2012-12-04 18:21:47 +00:00
equal ( $base . clone ( ) . append ( valueObj ( 5 ) ) . text ( ) ,
2012-11-08 15:05:10 +00:00
text + "5" ,
"Check for appending a number" + type
) ;
2012-06-16 02:17:05 +00:00
2012-12-04 18:21:47 +00:00
equal ( $base . clone ( ) . append ( valueObj ( [ jQuery ( "#first" ) . clone ( ) , jQuery ( "#yahoo, #google" ) . clone ( ) ] ) ) . text ( ) ,
2012-11-08 15:05:10 +00:00
text + "Try them out:GoogleYahoo" ,
"Check for appending of array of jQuery objects"
) ;
2012-06-16 01:37:01 +00:00
2012-11-08 15:05:10 +00:00
equal ( $base . clone ( ) . append ( valueObj ( " text with spaces " ) ) . text ( ) ,
text + " text with spaces " ,
"Check for appending text with spaces" + type
) ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
equal ( $base . clone ( ) . append ( valueObj ( [ ] ) ) . text ( ) ,
text ,
"Check for appending an empty array" + type
) ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
equal ( $base . clone ( ) . append ( valueObj ( "" ) ) . text ( ) ,
text ,
"Check for appending an empty string" + type
) ;
2012-06-21 19:30:24 +00:00
2012-12-04 18:21:47 +00:00
equal ( $base . clone ( ) . append ( valueObj ( document . getElementsByTagName ( "foo" ) ) ) . text ( ) ,
2012-11-08 15:05:10 +00:00
text ,
"Check for appending an empty nodelist" + type
) ;
2012-06-16 01:37:01 +00:00
2012-12-04 18:21:47 +00:00
equal ( $base . clone ( ) . append ( "<span></span>" , "<span></span>" , "<span></span>" ) . children ( ) . length ,
2012-11-08 15:05:10 +00:00
$base . children ( ) . length + 3 ,
"Make sure that multiple arguments works." + type
2012-06-16 01:37:01 +00:00
) ;
2009-03-18 21:15:38 +00:00
2012-12-04 18:21:47 +00:00
equal ( $base . clone ( ) . append ( valueObj ( document . getElementById ( "form" ) . cloneNode ( true ) ) ) . children ( "form" ) . length ,
2012-11-08 15:05:10 +00:00
1 ,
"Check for appending a form (#910)" + type
) ;
2012-06-21 19:30:24 +00:00
} ;
2012-06-16 01:37:01 +00:00
2012-12-04 18:21:47 +00:00
var testAppend = function ( valueObj ) {
2012-12-05 02:50:22 +00:00
2013-01-09 09:23:34 +00:00
expect ( 78 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
testAppendForObject ( valueObj , false ) ;
testAppendForObject ( valueObj , true ) ;
var defaultText , result , message , iframe , iframeDoc , j , d ,
2012-12-28 15:43:01 +00:00
$input , $radioChecked , $radioUnchecked , $radioParent , $map , $table ;
2012-12-04 18:21:47 +00:00
defaultText = "Try them out:" ;
result = jQuery ( "#first" ) . append ( valueObj ( "<b>buga</b>" ) ) ;
2012-06-16 01:37:01 +00:00
equal ( result . text ( ) , defaultText + "buga" , "Check if text appending works" ) ;
2012-12-04 18:21:47 +00:00
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
2012-12-04 18:21:47 +00:00
jQuery ( "form" ) . append ( valueObj ( "<input name='radiotest' type='radio' checked='checked' />" ) ) ;
jQuery ( "form input[name=radiotest]" ) . each ( function ( ) {
ok ( jQuery ( this ) . is ( ":checked" ) , "Append checked radio" ) ;
2010-01-25 23:43:33 +00:00
} ) . remove ( ) ;
2012-12-04 18:21:47 +00:00
jQuery ( "form" ) . append ( valueObj ( "<input name='radiotest2' type='radio' checked = 'checked' />" ) ) ;
jQuery ( "form input[name=radiotest2]" ) . each ( function ( ) {
ok ( jQuery ( this ) . is ( ":checked" ) , "Append alternately formated checked radio" ) ;
2010-01-25 23:43:33 +00:00
} ) . remove ( ) ;
2012-12-04 18:21:47 +00:00
jQuery ( "form" ) . append ( valueObj ( "<input name='radiotest3' type='radio' checked />" ) ) ;
jQuery ( "form input[name=radiotest3]" ) . each ( function ( ) {
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-12-04 18:21:47 +00:00
jQuery ( "form" ) . append ( valueObj ( "<input type='radio' checked='checked' name='radiotest4' />" ) ) ;
jQuery ( "form input[name=radiotest4]" ) . each ( function ( ) {
ok ( jQuery ( this ) . is ( ":checked" ) , "Append with name attribute after checked attribute" ) ;
2012-02-09 14:45:34 +00:00
} ) . remove ( ) ;
2012-12-04 18:21:47 +00:00
message = "Test for appending a DOM node to the contents of an iframe" ;
iframe = jQuery ( "#iframe" ) [ 0 ] ;
iframeDoc = iframe . contentDocument || iframe . contentWindow && iframe . contentWindow . document ;
2009-03-18 21:15:38 +00:00
try {
2012-11-08 15:05:10 +00:00
if ( iframeDoc && iframeDoc . body ) {
2012-12-04 18:21:47 +00:00
equal ( jQuery ( iframeDoc . body ) . append ( valueObj ( "<div id='success'>test</div>" ) ) [ 0 ] . lastChild . id , "success" , message ) ;
2012-11-08 15:05:10 +00:00
} else {
ok ( true , message + " - can't test" ) ;
}
2012-12-04 18:21:47 +00:00
} catch ( e ) {
2012-11-08 15:05:10 +00:00
strictEqual ( e . message || e , undefined , message ) ;
}
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
jQuery ( "<fieldset/>" ) . appendTo ( "#form" ) . append ( valueObj ( "<legend id='legend'>test</legend>" ) ) ;
2012-12-04 18:21:47 +00:00
t ( "Append legend" , "#legend" , [ "legend" ] ) ;
2009-03-18 21:15:38 +00:00
2012-12-28 14:39:12 +00:00
$map = jQuery ( "<map/>" ) . append ( valueObj ( "<area id='map01' shape='rect' coords='50,50,150,150' href='http://www.jquery.com/' alt='jQuery'>" ) ) ;
equal ( $map [ 0 ] . childNodes . length , 1 , "The area was inserted." ) ;
equal ( $map [ 0 ] . firstChild . nodeName . toLowerCase ( ) , "area" , "The area was inserted." ) ;
2012-11-08 15:05:10 +00:00
jQuery ( "#select1" ) . append ( valueObj ( "<OPTION>Test</OPTION>" ) ) ;
2013-02-19 04:52:29 +00:00
equal ( jQuery ( "#select1 option:last-child" ) . text ( ) , "Test" , "Appending OPTION (all caps)" ) ;
2009-03-18 21:15:38 +00:00
2012-12-28 14:56:29 +00:00
jQuery ( "#select1" ) . append ( valueObj ( "<optgroup label='optgroup'><option>optgroup</option></optgroup>" ) ) ;
equal ( jQuery ( "#select1 optgroup" ) . attr ( "label" ) , "optgroup" , "Label attribute in newly inserted optgroup is correct" ) ;
2013-02-19 04:52:29 +00:00
equal ( jQuery ( "#select1 option" ) . last ( ) . text ( ) , "optgroup" , "Appending optgroup" ) ;
2012-12-28 14:56:29 +00:00
2012-12-28 15:43:01 +00:00
$table = jQuery ( "#table" ) ;
2012-12-28 16:27:59 +00:00
jQuery . each ( "thead tbody tfoot colgroup caption tr th td" . split ( " " ) , function ( i , name ) {
2012-12-28 15:43:01 +00:00
$table . append ( valueObj ( "<" + name + "/>" ) ) ;
equal ( $table . find ( name ) . length , 1 , "Append " + name ) ;
2013-01-07 14:38:21 +00:00
ok ( jQuery . parseHTML ( "<" + name + "/>" ) . length , name + " wrapped correctly" ) ;
2012-12-28 15:43:01 +00:00
} ) ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
jQuery ( "#table colgroup" ) . append ( valueObj ( "<col/>" ) ) ;
equal ( jQuery ( "#table colgroup col" ) . length , 1 , "Append col" ) ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
jQuery ( "#form" )
. append ( valueObj ( "<select id='appendSelect1'></select>" ) )
. append ( valueObj ( "<select id='appendSelect2'><option>Test</option></select>" ) ) ;
2012-12-04 18:21:47 +00:00
t ( "Append Select" , "#appendSelect1, #appendSelect2" , [ "appendSelect1" , "appendSelect2" ] ) ;
2009-03-18 21:15:38 +00:00
2012-12-04 18:21:47 +00:00
equal ( "Two nodes" , jQuery ( "<div />" ) . append ( "Two" , " nodes" ) . text ( ) , "Appending two text nodes (#4011)" ) ;
2013-01-09 09:23:34 +00:00
equal ( jQuery ( "<div />" ) . append ( "1" , "" , 3 ) . text ( ) , "13" , "If median is false-like value, subsequent arguments should not be ignored" ) ;
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
2012-12-04 18:21:47 +00:00
j = jQuery ( "#nonnodes" ) . contents ( ) ;
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" ) ;
2012-11-08 15:05:10 +00:00
equal ( d . contents ( ) . length , 3 , "Check node,textnode,comment append works" ) ;
2009-03-18 21:15:38 +00:00
d . contents ( ) . appendTo ( "#nonnodes" ) ;
d . remove ( ) ;
2012-11-08 15:05:10 +00:00
equal ( jQuery ( "#nonnodes" ) . contents ( ) . length , 3 , "Check node,textnode,comment append cleanup worked" ) ;
2011-04-22 01:51:23 +00:00
2012-12-16 04:42:24 +00:00
$input = jQuery ( "<input type='checkbox'/>" ) . prop ( "checked" , true ) . appendTo ( "#testForm" ) ;
2012-12-04 18:21:47 +00:00
equal ( $input [ 0 ] . checked , true , "A checked checkbox that is appended stays checked" ) ;
2011-04-22 01:51:23 +00:00
2013-02-19 04:52:29 +00:00
$radioChecked = jQuery ( "input[type='radio'][name='R1']" ) . eq ( 1 ) ;
2012-12-04 18:21:47 +00:00
$radioParent = $radioChecked . parent ( ) ;
$radioUnchecked = jQuery ( "<input type='radio' name='R1' checked='checked'/>" ) . appendTo ( $radioParent ) ;
2013-01-27 04:48:59 +00:00
$radioChecked . trigger ( "click" ) ;
2012-12-04 18:21:47 +00:00
$radioUnchecked [ 0 ] . checked = false ;
2012-11-08 15:05:10 +00:00
$radioParent . wrap ( "<div></div>" ) ;
2012-12-04 18:21:47 +00:00
equal ( $radioChecked [ 0 ] . checked , true , "Reappending radios uphold which radio is checked" ) ;
equal ( $radioUnchecked [ 0 ] . checked , false , "Reappending radios uphold not being checked" ) ;
2012-11-28 02:32:59 +00:00
2012-12-04 18:21:47 +00:00
equal ( jQuery ( "<div/>" ) . append ( valueObj ( "option<area/>" ) ) [ 0 ] . childNodes . length , 2 , "HTML-string with leading text should be processed correctly" ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 20:19:43 +00:00
2012-12-04 18:21:47 +00:00
test ( "append(String|Element|Array<Element>|jQuery)" , function ( ) {
testAppend ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "append(Function)" , function ( ) {
testAppend ( manipulationFunctionReturningObj ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "append(param) to object, see #11280" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-11-21 03:57:41 +00:00
expect ( 5 ) ;
2012-10-16 18:59:36 +00:00
2012-11-21 03:57:41 +00:00
var object = jQuery ( document . createElement ( "object" ) ) . appendTo ( document . body ) ;
2012-10-16 18:59:36 +00:00
2012-11-21 03:57:41 +00:00
equal ( object . children ( ) . length , 0 , "object does not start with children" ) ;
2012-10-16 18:59:36 +00:00
2012-11-21 03:57:41 +00:00
object . append ( jQuery ( "<param type='wmode' name='foo'>" ) ) ;
equal ( object . children ( ) . length , 1 , "appended param" ) ;
equal ( object . children ( ) . eq ( 0 ) . attr ( "name" ) , "foo" , "param has name=foo" ) ;
2012-10-16 18:59:36 +00:00
2012-11-21 03:57:41 +00:00
object = jQuery ( "<object><param type='baz' name='bar'></object>" ) ;
equal ( object . children ( ) . length , 1 , "object created with child param" ) ;
equal ( object . children ( ) . eq ( 0 ) . attr ( "name" ) , "bar" , "param has name=bar" ) ;
2012-10-16 18:59:36 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "append(Function) with incoming value" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 12 ) ;
var defaultText , result , select , old , expected ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
defaultText = "Try them out:" ;
old = jQuery ( "#first" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
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
2012-12-04 18:21:47 +00:00
select = jQuery ( "#select3" ) ;
2010-01-07 18:34:16 +00:00
old = select . html ( ) ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
equal ( select . 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 "<option value='appendTest'>Append Test</option>" ;
2012-12-04 18:21:47 +00:00
} ) . 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 ( ) ;
2012-12-04 18:21:47 +00:00
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:" ;
2010-01-07 18:34:16 +00:00
old = jQuery ( "#sap" ) . html ( ) ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +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." ) ;
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +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 ;
} ) ;
2012-12-04 18:21:47 +00:00
ok ( jQuery ( "#sap" ) [ 0 ] . innerHTML . match ( /5$/ ) , "Check for appending a number" ) ;
2010-12-07 01:37:16 +00:00
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
2012-12-04 18:21:47 +00:00
test ( "replaceWith on XML document (#9960)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-09-07 18:12:24 +00:00
expect ( 1 ) ;
var newNode ,
xmlDoc1 = jQuery . parseXML ( "<scxml xmlns='http://www.w3.org/2005/07/scxml' version='1.0'><state x='100' y='100' initial='actions' id='provisioning'></state><state x='100' y='100' id='error'></state><state x='100' y='100' id='finished' final='true'></state></scxml>" ) ,
xmlDoc2 = jQuery . parseXML ( "<scxml xmlns='http://www.w3.org/2005/07/scxml' version='1.0'><state id='provisioning3'></state></scxml>" ) ,
xml1 = jQuery ( xmlDoc1 ) ,
xml2 = jQuery ( xmlDoc2 ) ,
2013-02-19 04:52:29 +00:00
scxml1 = jQuery ( "scxml" , xml1 ) ,
scxml2 = jQuery ( "scxml" , xml2 ) ;
2012-11-28 02:32:59 +00:00
2012-09-07 18:12:24 +00:00
scxml1 . replaceWith ( scxml2 ) ;
2012-11-28 02:32:59 +00:00
2013-02-19 04:52:29 +00:00
newNode = jQuery ( "scxml>state[id='provisioning3']" , xml1 ) ;
2012-11-28 02:32:59 +00:00
2012-09-07 18:12:24 +00:00
equal ( newNode . length , 1 , "ReplaceWith not working on document nodes." ) ;
} ) ;
2012-12-05 02:50:22 +00:00
// #12449
test ( "replaceWith([]) where replacing element requires cloning" , function ( ) {
expect ( 2 ) ;
jQuery ( "#qunit-fixture" ) . append (
"<div class='replaceable'></div><div class='replaceable'></div>"
) ;
// replacing set needs to be cloned so it can cover 3 replacements
jQuery ( "#qunit-fixture .replaceable" ) . replaceWith (
jQuery ( "<span class='replaced'></span><span class='replaced'></span>" )
) ;
equal ( jQuery ( "#qunit-fixture" ) . find ( ".replaceable" ) . length , 0 ,
"Make sure replaced elements were removed" ) ;
equal ( jQuery ( "#qunit-fixture" ) . find ( ".replaced" ) . length , 4 ,
"Make sure replacing elements were cloned" ) ;
} ) ;
2012-12-04 18:21:47 +00:00
test ( "append HTML5 sectioning elements (Bug #6485)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
var article , aside ;
2011-09-19 20:42:36 +00:00
jQuery ( "#qunit-fixture" ) . append ( "<article style='font-size:10px'><section><aside>HTML5 elements</aside></section></article>" ) ;
2012-12-04 18:21:47 +00:00
article = jQuery ( "article" ) ,
2011-09-19 20:42:36 +00:00
aside = jQuery ( "aside" ) ;
2012-12-04 18:21:47 +00:00
equal ( article . get ( 0 ) . style . fontSize , "10px" , "HTML5 elements are styleable" ) ;
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 ) {
2012-12-04 18:21:47 +00:00
test ( "HTML5 Elements inherit styles from style rules (Bug #10501)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
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"
2012-12-04 18:21:47 +00:00
notEqual ( jQuery ( "section" ) . css ( "background-color" ) , "transparent" , "HTML5 elements inherit styles" ) ;
2012-06-11 01:54:16 +00:00
} ) ;
}
2011-09-19 20:42:36 +00:00
2012-12-04 18:21:47 +00:00
test ( "html(String) with HTML5 (Bug #6485)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2011-09-19 20:42:36 +00:00
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-12-04 18:21:47 +00:00
test ( "IE8 serialization bug" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2012-04-05 16:12:38 +00:00
var wrapper = jQuery ( "<div></div>" ) ;
wrapper . html ( "<div></div><article></article>" ) ;
2012-12-04 18:21:47 +00:00
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>" ) ;
2012-12-04 18:21:47 +00:00
equal ( wrapper . children ( "link" ) . length , 1 , "Link elements are insertable with .html()" ) ;
2012-04-05 16:12:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "html() object element #10324" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-03-23 15:31:05 +00:00
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-12-04 18:21:47 +00:00
clone = object . clone ( ) ;
2012-03-23 15:31:05 +00:00
equal ( clone . html ( ) , object . html ( ) , "html() returns correct innerhtml of cloned object elements" ) ;
} ) ;
2012-12-04 18:21:47 +00:00
test ( "append(xml)" , function ( ) {
2012-12-05 02:50:22 +00:00
2011-05-26 00:48:59 +00:00
expect ( 1 ) ;
2012-12-04 18:21:47 +00:00
var xmlDoc , xml1 , xml2 ;
2011-05-26 00:48:59 +00:00
function createXMLDoc ( ) {
// Initialize DOM based upon latest installed MSXML or Netscape
2012-12-04 18:21:47 +00:00
var elem , n , len ,
2011-05-26 00:48:59 +00:00
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
2012-12-04 18:21:47 +00:00
for ( n = 0 , len = aActiveX . length ; n < len ; n ++ ) {
2011-05-26 00:48:59 +00:00
try {
elem = new ActiveXObject ( aActiveX [ n ] ) ;
return elem ;
2012-12-04 18:21:47 +00:00
} catch ( _ ) { }
2011-05-26 00:48:59 +00:00
}
}
}
2012-12-04 18:21:47 +00:00
xmlDoc = createXMLDoc ( ) ;
xml1 = xmlDoc . createElement ( "head" ) ;
xml2 = xmlDoc . createElement ( "test" ) ;
2011-05-26 00:48:59 +00:00
2012-12-04 18:21:47 +00:00
ok ( jQuery ( xml1 ) . append ( xml2 ) , "Append an xml element to another without raising an exception." ) ;
2011-05-26 00:48:59 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "appendTo(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-12-03 04:32:16 +00:00
expect ( 16 ) ;
2010-02-13 08:14:00 +00:00
2012-12-04 18:21:47 +00:00
var defaultText , l , expected , num , div ;
2012-06-21 19:30:24 +00:00
2012-12-04 18:21:47 +00:00
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" ) ;
2012-12-04 18:21:47 +00:00
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
2012-12-04 18:21:47 +00:00
l = jQuery ( "#first" ) . children ( ) . length + 2 ;
2010-03-05 05:14:47 +00:00
jQuery ( "<strong>test</strong>" ) ;
jQuery ( "<strong>test</strong>" ) ;
2012-12-04 18:21:47 +00:00
jQuery ( [ jQuery ( "<strong>test</strong>" ) [ 0 ] , jQuery ( "<strong>test</strong>" ) [ 0 ] ] )
2010-03-05 05:14:47 +00:00
. appendTo ( "#first" ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#first" ) . children ( ) . length , l , "Make sure the elements were inserted." ) ;
2012-12-04 18:21:47 +00:00
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 ( ) ;
2012-12-04 18:21:47 +00:00
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:" ;
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
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo" ;
2012-12-04 18:21:47 +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." ) ;
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
2011-04-12 08:47:46 +00:00
jQuery ( "#select1" ) . appendTo ( "#foo" ) ;
2012-12-04 18:21:47 +00:00
t ( "Append select" , "#foo select" , [ "select1" ] ) ;
2009-03-18 21:15:38 +00:00
2013-01-27 04:48:59 +00:00
div = jQuery ( "<div/>" ) . on ( "click" , function ( ) {
2012-12-04 18:21:47 +00:00
ok ( true , "Running a cloned click." ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2011-04-17 06:43:57 +00:00
div . appendTo ( "#qunit-fixture, #moretests" ) ;
2009-03-18 21:15:38 +00:00
2013-02-19 04:52:29 +00:00
jQuery ( "#qunit-fixture div" ) . last ( ) . trigger ( "click" ) ;
jQuery ( "#moretests div" ) . last ( ) . trigger ( "click" ) ;
2009-03-18 21:15:38 +00:00
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" ) ;
2013-02-19 04:52:29 +00:00
ok ( jQuery ( "#qunit-fixture div" ) . last ( ) . hasClass ( "test" ) , "appendTo element was modified after the insertion" ) ;
ok ( jQuery ( "#moretests div" ) . last ( ) . hasClass ( "test" ) , "appendTo element was modified after the insertion" ) ;
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" ) ;
2012-12-04 18:21:47 +00:00
num = jQuery ( "#qunit-fixture div" ) . length ;
2011-04-17 06:43:57 +00:00
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." ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
var testPrepend = function ( val ) {
expect ( 6 ) ;
var defaultText , result , expected ;
defaultText = "Try them out:" ;
result = jQuery ( "#first" ) . prepend ( val ( "<b>buga</b>" ) ) ;
2012-06-21 19:30:24 +00:00
2011-11-06 20:27:42 +00:00
equal ( result . text ( ) , "buga" + defaultText , "Check if text prepending works" ) ;
2012-12-04 18:21:47 +00:00
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 ( ) ;
2012-12-04 18:21:47 +00:00
expected = "Try them out:This link has class=\"blog\": Simon Willison's Weblog" ;
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" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +00:00
jQuery ( "#sap" ) . prepend ( val ( [ jQuery ( "#first" ) , jQuery ( "#yahoo, #google" ) ] ) ) ;
2012-06-16 02:17:05 +00:00
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
2012-12-04 18:21:47 +00:00
test ( "prepend(String|Element|Array<Element>|jQuery)" , function ( ) {
testPrepend ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "prepend(Function)" , function ( ) {
testPrepend ( manipulationFunctionReturningObj ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "prepend(Function) with incoming value" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 10 ) ;
var defaultText , old , result , expected ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
defaultText = "Try them out:" ;
old = jQuery ( "#first" ) . html ( ) ;
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
} ) ;
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +00:00
equal ( jQuery ( "#select3" ) . 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 "<option value='prependTest'>Prepend Test</option>" ;
2012-12-04 18:21:47 +00:00
} ) . 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 ( ) ;
2012-12-04 18:21:47 +00:00
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
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +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." ) ;
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +00:00
test ( "prependTo(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 6 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var defaultText , expected ;
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" ) ;
2012-12-04 18:21:47 +00:00
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 ( ) ;
2012-12-04 18:21:47 +00:00
expected = "Try them out:This link has class=\"blog\": Simon Willison's Weblog" ;
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" ;
2012-12-04 18:21:47 +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 ( ) ;
2013-02-19 04:52:29 +00:00
jQuery ( "<select id='prependSelect1'></select>" ) . prependTo ( "#form" ) ;
jQuery ( "<select id='prependSelect2'><option>Test</option></select>" ) . prependTo ( "#form" ) ;
2009-03-18 21:15:38 +00:00
2012-12-04 18:21:47 +00:00
t ( "Prepend Select" , "#prependSelect2, #prependSelect1" , [ "prependSelect2" , "prependSelect1" ] ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
var testBefore = function ( val ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 7 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var expected , set ;
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" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +00:00
jQuery ( "#yahoo" ) . before ( val ( [ jQuery ( "#first" ) , jQuery ( "#mark, #google" ) ] ) ) ;
2012-06-16 02:17:05 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert array of jQuery objects before" ) ;
2012-12-04 18:21:47 +00:00
set = jQuery ( "<div/>" ) . before ( "<span>test</span>" ) ;
equal ( set [ 0 ] . nodeName . toLowerCase ( ) , "div" , "Insert before a disconnected node should be a no-op" ) ;
2012-10-16 20:50:30 +00:00
equal ( set . length , 1 , "Insert the element before the disconnected node. should be a no-op" ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 20:19:43 +00:00
2012-12-04 18:21:47 +00:00
test ( "before(String|Element|Array<Element>|jQuery)" , function ( ) {
testBefore ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "before(Function)" , function ( ) {
testBefore ( manipulationFunctionReturningObj ) ;
2012-06-21 19:30:24 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2012-12-04 18:21:47 +00:00
test ( "before and after w/ empty object (#10812)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 1 ) ;
var res ;
2011-11-17 16:47:56 +00:00
2012-12-04 18:21:47 +00:00
res = jQuery ( "#notInTheDocument" ) . before ( "(" ) . after ( ")" ) ;
2012-10-16 20:50:30 +00:00
equal ( res . length , 0 , "didn't choke on empty object" ) ;
2011-11-17 16:47:56 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "before and after on disconnected node (#10517)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 6 ) ;
2012-12-05 02:50:22 +00:00
2012-10-16 20:50:30 +00:00
var expectedBefore = "This is a normal link: bugaYahoo" ,
expectedAfter = "This is a normal link: Yahoobuga" ;
equal ( jQuery ( "<input type='checkbox'/>" ) . before ( "<div/>" ) . length , 1 , "before() on disconnected node is no-op" ) ;
equal ( jQuery ( "<input type='checkbox'/>" ) . after ( "<div/>" ) . length , 1 , "after() on disconnected node is no-op" ) ;
QUnit . reset ( ) ;
jQuery ( "#yahoo" ) . add ( "<span/>" ) . before ( "<b>buga</b>" ) ;
equal ( jQuery ( "#en" ) . text ( ) , expectedBefore , "Insert String before with disconnected node last" ) ;
QUnit . reset ( ) ;
jQuery ( "<span/>" ) . add ( "#yahoo" ) . before ( "<b>buga</b>" ) ;
equal ( jQuery ( "#en" ) . text ( ) , expectedBefore , "Insert String before with disconnected node first" ) ;
QUnit . reset ( ) ;
jQuery ( "#yahoo" ) . add ( "<span/>" ) . after ( "<b>buga</b>" ) ;
equal ( jQuery ( "#en" ) . text ( ) , expectedAfter , "Insert String after with disconnected node last" ) ;
2012-10-16 14:17:14 +00:00
2012-10-16 20:50:30 +00:00
QUnit . reset ( ) ;
jQuery ( "<span/>" ) . add ( "#yahoo" ) . after ( "<b>buga</b>" ) ;
equal ( jQuery ( "#en" ) . text ( ) , expectedAfter , "Insert String after with disconnected node first" ) ;
2012-07-10 14:14:43 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "insertBefore(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 4 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var expected ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expected = "This is a normal link: bugaYahoo" ;
2011-04-12 08:47:46 +00:00
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" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +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
} ) ;
2012-12-04 18:21:47 +00:00
var testAfter = function ( val ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 7 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var set , expected ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
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:" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +00:00
jQuery ( "#yahoo" ) . after ( val ( [ jQuery ( "#first" ) , jQuery ( "#mark, #google" ) ] ) ) ;
2012-06-16 02:17:05 +00:00
equal ( jQuery ( "#en" ) . text ( ) , expected , "Insert array of jQuery objects after" ) ;
2012-12-04 18:21:47 +00:00
set = jQuery ( "<div/>" ) . before ( "<span>test</span>" ) ;
equal ( set [ 0 ] . nodeName . toLowerCase ( ) , "div" , "Insert after a disconnected node should be a no-op" ) ;
2012-10-16 20:50:30 +00:00
equal ( set . length , 1 , "Insert the element after the disconnected node should be a no-op" ) ;
2009-07-12 20:19:43 +00:00
} ;
2012-12-04 18:21:47 +00:00
test ( "after(String|Element|Array<Element>|jQuery)" , function ( ) {
testAfter ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "after(Function)" , function ( ) {
testAfter ( manipulationFunctionReturningObj ) ;
2012-06-21 19:30:24 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2012-12-04 18:21:47 +00:00
test ( "insertAfter(String|Element|Array<Element>|jQuery)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 4 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var expected ;
expected = "This is a normal link: Yahoobuga" ;
2011-04-12 08:47:46 +00:00
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:" ;
2012-12-04 18:21:47 +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" ;
2012-12-04 18:21:47 +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
} ) ;
2012-12-04 18:21:47 +00:00
var testReplaceWith = function ( val ) {
2012-12-05 02:50:22 +00:00
2013-01-16 17:30:47 +00:00
var tmp , y , child , child2 , set , non _existent , $div ,
2013-01-16 17:55:56 +00:00
expected = 23 ;
2012-12-05 02:50:22 +00:00
2013-01-16 17:30:47 +00:00
expect ( expected ) ;
2012-12-04 18:21:47 +00:00
2013-01-16 17:30:47 +00:00
jQuery ( "#yahoo" ) . replaceWith ( val ( "<b id='replace'>buga</b>" ) ) ;
ok ( jQuery ( "#replace" ) [ 0 ] , "Replace element with element from string" ) ;
2012-12-04 18:21:47 +00:00
ok ( ! jQuery ( "#yahoo" ) [ 0 ] , "Verify that original element is gone, after string" ) ;
2009-03-18 21:15:38 +00:00
2013-01-16 17:30:47 +00:00
jQuery ( "#anchor2" ) . replaceWith ( val ( document . getElementById ( "first" ) ) ) ;
2012-12-04 18:21:47 +00:00
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with element" ) ;
2013-01-16 17:30:47 +00:00
ok ( ! jQuery ( "#anchor2" ) [ 0 ] , "Verify that original element is gone, after element" ) ;
2009-03-18 21:15:38 +00:00
2013-01-16 17:30:47 +00:00
jQuery ( "#qunit-fixture" ) . append ( "<div id='bar'><div id='baz'></div></div>" ) ;
jQuery ( "#baz" ) . replaceWith ( val ( "Baz" ) ) ;
2011-11-06 20:27:42 +00:00
equal ( jQuery ( "#bar" ) . text ( ) , "Baz" , "Replace element with text" ) ;
2012-12-04 18:21:47 +00:00
ok ( ! jQuery ( "#baz" ) [ 0 ] , "Verify that original element is gone, after element" ) ;
2010-02-02 02:48:05 +00:00
2013-01-16 17:30:47 +00:00
jQuery ( "#google" ) . replaceWith ( val ( [ document . getElementById ( "first" ) , document . getElementById ( "mark" ) ] ) ) ;
2012-12-04 18:21:47 +00:00
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with array of elements" ) ;
ok ( jQuery ( "#mark" ) [ 0 ] , "Replace element with array of elements" ) ;
2013-01-16 17:30:47 +00:00
ok ( ! jQuery ( "#google" ) [ 0 ] , "Verify that original element is gone, after array of elements" ) ;
2009-03-18 21:15:38 +00:00
2013-01-16 17:30:47 +00:00
jQuery ( "#groups" ) . replaceWith ( val ( jQuery ( "#mark, #first" ) ) ) ;
2012-12-04 18:21:47 +00:00
ok ( jQuery ( "#first" ) [ 0 ] , "Replace element with set of elements" ) ;
ok ( jQuery ( "#mark" ) [ 0 ] , "Replace element with set of elements" ) ;
2013-01-16 17:30:47 +00:00
ok ( ! jQuery ( "#groups" ) [ 0 ] , "Verify that original element is gone, after set of elements" ) ;
2009-09-14 22:09:42 +00:00
2013-01-16 17:55:56 +00:00
tmp = jQuery ( "<b>content</b>" ) [ 0 ] ;
jQuery ( "#anchor1" ) . contents ( ) . replaceWith ( val ( tmp ) ) ;
deepEqual ( jQuery ( "#anchor1" ) . contents ( ) . get ( ) , [ tmp ] , "Replace text node with element" ) ;
2013-01-16 17:30:47 +00:00
2013-01-27 04:48:59 +00:00
tmp = jQuery ( "<div/>" ) . appendTo ( "#qunit-fixture" ) . on ( "click" , function ( ) {
2012-12-04 18:21:47 +00:00
ok ( true , "Newly bound click run." ) ;
} ) ;
2013-01-27 04:48:59 +00:00
y = jQuery ( "<div/>" ) . appendTo ( "#qunit-fixture" ) . on ( "click" , function ( ) {
2013-01-16 17:30:47 +00:00
ok ( false , "Previously bound click run." ) ;
2012-12-04 18:21:47 +00:00
} ) ;
2013-01-27 04:48:59 +00:00
child = y . append ( "<b>test</b>" ) . find ( "b" ) . on ( "click" , function ( ) {
2012-12-04 18:21:47 +00:00
ok ( true , "Child bound click run." ) ;
return false ;
} ) ;
2010-01-11 21:08:39 +00:00
2013-01-16 17:30:47 +00:00
y . replaceWith ( val ( tmp ) ) ;
2010-01-11 21:08:39 +00:00
2013-01-27 04:48:59 +00:00
tmp . trigger ( "click" ) ;
y . trigger ( "click" ) ; // Shouldn't be run
child . trigger ( "click" ) ; // Shouldn't be run
2010-01-11 21:25:01 +00:00
2013-01-27 04:48:59 +00:00
y = jQuery ( "<div/>" ) . appendTo ( "#qunit-fixture" ) . on ( "click" , function ( ) {
2013-01-16 17:30:47 +00:00
ok ( false , "Previously bound click run." ) ;
2012-12-04 18:21:47 +00:00
} ) ;
2013-01-27 04:48:59 +00:00
child2 = y . append ( "<u>test</u>" ) . find ( "u" ) . on ( "click" , function ( ) {
2012-12-04 18:21:47 +00:00
ok ( true , "Child 2 bound click run." ) ;
return false ;
} ) ;
2010-01-11 21:25:01 +00:00
2013-01-16 17:30:47 +00:00
y . replaceWith ( val ( child2 ) ) ;
2010-01-11 21:25:01 +00:00
2013-01-27 04:48:59 +00:00
child2 . trigger ( "click" ) ;
2010-01-11 20:57:45 +00:00
2013-01-16 17:30:47 +00:00
set = jQuery ( "<div/>" ) . replaceWith ( val ( "<span>test</span>" ) ) ;
2012-12-08 19:49:42 +00:00
equal ( set [ 0 ] . nodeName . toLowerCase ( ) , "div" , "No effect on a disconnected node." ) ;
equal ( set . length , 1 , "No effect on a disconnected node." ) ;
equal ( set [ 0 ] . childNodes . length , 0 , "No effect on a disconnected node." ) ;
2012-03-30 15:56:11 +00:00
2009-12-05 20:30:36 +00:00
2013-01-16 17:30:47 +00:00
non _existent = jQuery ( "#does-not-exist" ) . replaceWith ( val ( "<b>should not throw an error</b>" ) ) ;
equal ( non _existent . length , 0 , "Length of non existent element." ) ;
2010-10-09 15:41:58 +00:00
2013-01-16 17:30:47 +00:00
$div = jQuery ( "<div class='replacewith'></div>" ) . appendTo ( "#qunit-fixture" ) ;
$div . replaceWith ( val ( "<div class='replacewith'></div><script>" +
"equal( jQuery('.replacewith').length, 1, 'Check number of elements in page.' );" +
"</script>" ) ) ;
2010-10-09 15:41:58 +00:00
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>" ) ) ;
2013-01-16 17:30:47 +00:00
equal ( jQuery ( "#qunit-fixture" ) . find ( "div[id=replaceWith]" ) . length , 1 , "Make sure only one div exists after replacement." ) ;
2010-10-09 15:41:58 +00:00
jQuery ( "#replaceWith" ) . replaceWith ( val ( "<div id='replaceWith'></div>" ) ) ;
2013-01-16 17:30:47 +00:00
equal ( jQuery ( "#qunit-fixture" ) . find ( "div[id=replaceWith]" ) . length , 1 , "Make sure only one div exists after subsequent replacement." ) ;
return expected ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 21:08:54 +00:00
2012-12-04 18:21:47 +00:00
test ( "replaceWith(String|Element|Array<Element>|jQuery)" , function ( ) {
testReplaceWith ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "replaceWith(Function)" , function ( ) {
2013-01-16 17:30:47 +00:00
expect ( testReplaceWith ( manipulationFunctionReturningObj ) + 1 ) ;
2010-01-26 00:22:28 +00:00
2013-01-16 17:30:47 +00:00
var y = jQuery ( "#foo" ) [ 0 ] ;
2010-01-26 00:22:28 +00:00
2013-01-16 17:30:47 +00:00
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-02-02 02:53:31 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "replaceWith(string) for more than one element" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 3 ) ;
2010-02-02 02:53:31 +00:00
2012-12-04 18:21:47 +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
2013-02-07 21:43:25 +00:00
test ( "replaceWith(\"\") (#13401)" , 4 , function ( ) {
expect ( 1 ) ;
var div = jQuery ( "<div><p></p></div>" ) ;
div . children ( ) . replaceWith ( "" ) ;
equal ( div . html ( ) . toLowerCase ( ) , "" , "Replacing with empty string removes element" ) ;
} ) ;
2012-12-04 18:21:47 +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" ) ;
2012-12-04 18:21:47 +00:00
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 ( ) ;
2012-12-04 18:21:47 +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 ( ) ;
2012-12-04 18:21:47 +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" ) ;
2012-12-04 18:21:47 +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
} ) ;
2012-12-04 18:21:47 +00:00
test ( "jQuery.clone() (#8017)" , function ( ) {
2011-01-21 16:08:15 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2011-01-21 16:08:15 +00:00
ok ( jQuery . clone && jQuery . isFunction ( jQuery . clone ) , "jQuery.clone() utility exists and is a function." ) ;
2012-12-04 18:21:47 +00:00
var main = jQuery ( "#qunit-fixture" ) [ 0 ] ,
clone = jQuery . clone ( main ) ;
2011-01-21 16:08:15 +00:00
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
} ) ;
2012-12-04 18:21:47 +00:00
test ( "append to multiple elements (#8070)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2011-01-28 16:55:39 +00:00
2012-11-10 04:43:46 +00:00
var selects = jQuery ( "<select class='test8070'></select><select class='test8070'></select>" ) . appendTo ( "#qunit-fixture" ) ;
2011-04-12 08:47:46 +00:00
selects . append ( "<OPTION>1</OPTION><OPTION>2</OPTION>" ) ;
2011-01-28 16:55:39 +00:00
2012-12-04 18:21:47 +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
} ) ;
2012-12-04 18:21:47 +00:00
test ( "clone()" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-11-08 15:05:10 +00:00
expect ( 45 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var div , clone , form , body ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
equal ( jQuery ( "#en" ) . text ( ) , "This is a normal link: Yahoo" , "Assert text for #en" ) ;
equal ( jQuery ( "#first" ) . append ( jQuery ( "#yahoo" ) . clone ( ) ) . text ( ) , "Try them out:Yahoo" , "Check for clone" ) ;
equal ( jQuery ( "#en" ) . text ( ) , "This is a normal link: Yahoo" , "Reassert text for #en" ) ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
jQuery . each ( "table thead tbody tfoot tr td div button ul ol li select option textarea iframe" . split ( " " ) , function ( i , nodeName ) {
2012-12-04 18:21:47 +00:00
equal ( jQuery ( "<" + nodeName + "/>" ) . clone ( ) [ 0 ] . nodeName . toLowerCase ( ) , nodeName , "Clone a " + nodeName ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
equal ( jQuery ( "<input type='checkbox' />" ) . clone ( ) [ 0 ] . nodeName . toLowerCase ( ) , "input" , "Clone a <input type='checkbox' />" ) ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
// Check cloning non-elements
equal ( jQuery ( "#nonnodes" ) . contents ( ) . clone ( ) . length , 3 , "Check node,textnode,comment clone works (some browsers delete comments on clone)" ) ;
2011-01-09 21:58:47 +00:00
2012-11-08 15:05:10 +00:00
// Verify that clones of clones can keep event listeners
2013-01-27 04:48:59 +00:00
div = jQuery ( "<div><ul><li>test</li></ul></div>" ) . on ( "click" , function ( ) {
2012-11-08 15:05:10 +00:00
ok ( true , "Bound event still exists." ) ;
} ) ;
2012-12-04 18:21:47 +00:00
clone = div . clone ( true ) ; div . remove ( ) ;
div = clone . clone ( true ) ; clone . remove ( ) ;
2011-01-09 21:58:47 +00:00
2011-11-06 20:27:42 +00:00
equal ( div . length , 1 , "One element cloned" ) ;
2012-12-04 18:21:47 +00:00
equal ( div [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "DIV element cloned" ) ;
2009-03-18 21:15:38 +00:00
div . trigger ( "click" ) ;
2012-11-08 15:05:10 +00:00
// Manually clean up detached elements
2011-01-09 21:58:47 +00:00
div . remove ( ) ;
2012-11-08 15:05:10 +00:00
// Verify that cloned children can keep event listeners
2009-03-18 21:15:38 +00:00
div = jQuery ( "<div/>" ) . append ( [ document . createElement ( "table" ) , document . createElement ( "table" ) ] ) ;
2013-01-27 04:48:59 +00:00
div . find ( "table" ) . on ( "click" , function ( ) {
2009-03-18 21:15:38 +00:00
ok ( true , "Bound event still exists." ) ;
} ) ;
2012-12-04 18:21:47 +00:00
clone = div . clone ( true ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . length , 1 , "One element cloned" ) ;
2012-12-04 18:21:47 +00:00
equal ( clone [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "DIV element cloned" ) ;
2012-11-08 15:05:10 +00:00
clone . find ( "table" ) . trigger ( "click" ) ;
2011-01-09 21:58:47 +00:00
2012-11-08 15:05:10 +00:00
// Manually clean up detached elements
2011-01-09 21:58:47 +00:00
div . remove ( ) ;
clone . remove ( ) ;
2009-03-18 21:15:38 +00:00
2012-11-08 15:05:10 +00:00
// Make sure that doing .clone() doesn't clone event listeners
2013-01-27 04:48:59 +00:00
div = jQuery ( "<div><ul><li>test</li></ul></div>" ) . on ( "click" , function ( ) {
2011-02-01 13:57:18 +00:00
ok ( false , "Bound event still exists after .clone()." ) ;
2012-11-08 15:05:10 +00:00
} ) ;
clone = div . clone ( ) ;
2011-02-01 13:57:18 +00:00
2012-11-08 15:05:10 +00:00
clone . trigger ( "click" ) ;
2011-02-01 13:57:18 +00:00
2012-11-08 15:05:10 +00:00
// Manually clean up detached elements
clone . remove ( ) ;
div . remove ( ) ;
2011-02-01 13:57:18 +00:00
2012-11-08 15:05:10 +00:00
// Test both html() and clone() for <embed> and <object> types
2012-10-16 14:17:14 +00:00
div = jQuery ( "<div/>" ) . html ( "<embed height='355' width='425' src='http://www.youtube.com/v/3KANI2dpXLw&hl=en'></embed>" ) ;
2011-03-09 20:44:46 +00:00
2012-12-04 18:21:47 +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" ) ;
2012-12-04 18:21:47 +00:00
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
2012-12-04 18:21:47 +00:00
clone = div . clone ( true ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . length , 1 , "One element cloned" ) ;
2012-12-04 18:21:47 +00:00
equal ( clone [ 0 ] . nodeName . toUpperCase ( ) , "DIV" , "DIV element cloned" ) ;
2012-11-08 15:05:10 +00:00
div = div . find ( "object" ) ;
clone = clone . find ( "object" ) ;
// oldIE adds extra attributes and <param> elements, so just test for existence of the defined set
2012-12-04 18:21:47 +00:00
jQuery . each ( [ "height" , "width" , "classid" ] , function ( i , attr ) {
2012-11-08 15:05:10 +00:00
equal ( clone . attr ( attr ) , div . attr ( attr ) , "<object> attribute cloned: " + attr ) ;
2012-12-04 18:21:47 +00:00
} ) ;
2012-11-08 15:05:10 +00:00
( function ( ) {
2012-07-30 18:10:18 +00:00
var params = { } ;
2012-12-04 18:21:47 +00:00
clone . find ( "param" ) . each ( function ( index , param ) {
2012-11-08 15:05:10 +00:00
params [ param . attributes . name . nodeValue . toLowerCase ( ) ] =
2012-07-30 18:10:18 +00:00
param . attributes . value . nodeValue . toLowerCase ( ) ;
} ) ;
2012-12-04 18:21:47 +00:00
div . find ( "param" ) . each ( function ( index , param ) {
2012-11-08 15:05:10 +00:00
var key = param . attributes . name . nodeValue . toLowerCase ( ) ;
equal ( params [ key ] , param . attributes . value . nodeValue . toLowerCase ( ) , "<param> cloned: " + key ) ;
2012-07-30 18:10:18 +00:00
} ) ;
} ) ( ) ;
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" ) ;
2012-12-04 18:21:47 +00:00
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 } ) ;
2012-12-04 18:21:47 +00:00
clone = div . clone ( true ) ;
2011-11-06 20:27:42 +00:00
equal ( clone . data ( "a" ) , true , "Data cloned." ) ;
2012-12-04 18:21: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 ( ) ;
2012-12-04 18:21:47 +00:00
form = document . createElement ( "form" ) ;
2010-02-02 02:26:47 +00:00
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
2012-12-04 18:21:47 +00:00
body = jQuery ( "body" ) . clone ( ) ;
2012-12-11 00:07:07 +00:00
equal ( body . children ( ) [ 0 ] . id , "qunit" , "Make sure cloning body works" ) ;
2012-11-19 14:50:19 +00:00
body . remove ( ) ;
2011-01-10 00:38:44 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "clone(script type=non-javascript) (#11359)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 3 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var src = jQuery ( "<script type='text/filler'>Lorem ipsum dolor sit amet</script><q><script type='text/filler'>consectetur adipiscing elit</script></q>" ) ,
dest = src . clone ( ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
equal ( dest [ 0 ] . text , "Lorem ipsum dolor sit amet" , "Cloning preserves script text" ) ;
2012-02-17 19:17:20 +00:00
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" ) ;
2012-11-19 14:50:19 +00:00
dest . remove ( ) ;
2012-02-17 19:17:20 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "clone(form element) (Bug #3879, #6655)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 5 ) ;
2012-12-05 02:50:22 +00:00
2013-02-19 04:52:29 +00:00
var clone , element ;
element = jQuery ( "<select><option>Foo</option><option value='selected' selected>Bar</option></select>" ) ;
2011-01-10 00:38:44 +00:00
2013-02-19 04:52:29 +00:00
equal ( element . clone ( ) . find ( "option" ) . filter ( function ( ) { return this . selected ; } ) . val ( ) , "selected" , "Selected option cloned correctly" ) ;
2011-01-10 00:38:44 +00:00
2012-12-04 18:21:47 +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" ) ;
2012-12-04 18:21:47 +00:00
equal ( clone [ 0 ] . defaultValue , "foo" , "Checked input defaultValue cloned correctly" ) ;
2011-05-11 12:12:19 +00:00
2011-01-10 00:38:44 +00:00
element = jQuery ( "<input type='text' value='foo'>" ) ;
clone = element . clone ( ) ;
2012-12-04 18:21:47 +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 ( ) ;
2012-12-04 18:21:47 +00:00
equal ( clone [ 0 ] . defaultValue , "foo" , "Textarea defaultValue cloned correctly" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "clone(multiple selected options) (Bug #8129)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 1 ) ;
2012-12-05 02:50:22 +00:00
2011-02-01 22:54:02 +00:00
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
} ) ;
2012-12-04 18:21:47 +00:00
test ( "clone() on XML nodes" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
var xml = createDashboardXML ( ) ,
root = jQuery ( xml . documentElement ) . clone ( ) ,
origTab = jQuery ( "tab" , xml ) . eq ( 0 ) ,
cloneTab = jQuery ( "tab" , root ) . eq ( 0 ) ;
2012-12-05 02:50:22 +00:00
2012-04-15 21:41:54 +00:00
origTab . text ( "origval" ) ;
cloneTab . text ( "cloneval" ) ;
2012-12-04 18:21:47 +00:00
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-12-04 18:21:47 +00:00
test ( "clone() on local XML nodes with html5 nodename" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +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-12-04 18:21:47 +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 21:17:12 +00:00
} ) ;
2012-02-10 01:48:21 +00:00
2012-12-04 18:21:47 +00:00
test ( "html(undefined)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 1 ) ;
2012-12-05 02:50:22 +00:00
2011-12-06 20:25:38 +00:00
equal ( jQuery ( "#foo" ) . html ( "<i>test</i>" ) . html ( undefined ) . html ( ) . toLowerCase ( ) , "<i>test</i>" , ".html(undefined) is chainable (#5571)" ) ;
} ) ;
2012-12-04 18:21:47 +00:00
test ( "html() on empty set" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 1 ) ;
2012-12-05 02:50:22 +00:00
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
} ) ;
2012-11-19 14:50:19 +00:00
var childNodeNames = function ( node ) {
return jQuery . map ( node . childNodes , function ( child ) {
return child . nodeName . toUpperCase ( ) ;
} ) . join ( " " ) ;
} ;
2009-07-21 09:17:33 +00:00
2012-11-19 14:50:19 +00:00
var testHtml = function ( valueObj ) {
expect ( 37 ) ;
2009-07-21 09:17:33 +00:00
2012-11-19 14:50:19 +00:00
var actual , expected , tmp ,
div = jQuery ( "<div></div>" ) ,
fixture = jQuery ( "#qunit-fixture" ) ;
2010-01-25 02:37:05 +00:00
2012-11-19 14:50:19 +00:00
div . html ( valueObj ( "<div id='parent_1'><div id='child_1'/></div><div id='parent_2'/>" ) ) ;
equal ( div . children ( ) . length , 2 , "Found children" ) ;
equal ( div . children ( ) . children ( ) . length , 1 , "Found grandchild" ) ;
2010-01-25 02:37:05 +00:00
2012-11-19 14:50:19 +00:00
actual = [ ] ; expected = [ ] ;
tmp = jQuery ( "<map/>" ) . html ( valueObj ( "<area alt='area'/>" ) ) . each ( function ( ) {
expected . push ( "AREA" ) ;
actual . push ( childNodeNames ( this ) ) ;
} ) ;
equal ( expected . length , 1 , "Expecting one parent" ) ;
deepEqual ( actual , expected , "Found the inserted area element" ) ;
2010-02-06 00:58:08 +00:00
2012-12-04 18:21:47 +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" ) ;
2010-02-13 08:30:45 +00:00
2012-11-19 14:50:19 +00:00
div . html ( valueObj ( " &" ) ) ;
equal (
2012-12-04 18:21:47 +00:00
div [ 0 ] . innerHTML . replace ( /\xA0/ , " " ) ,
2012-11-19 14:50:19 +00:00
" &" ,
"Entities are passed through correctly"
) ;
2010-02-13 08:30:45 +00:00
2012-11-19 14:50:19 +00:00
tmp = "<div>hello1</div>" ;
2012-12-04 18:21:47 +00:00
equal ( div . html ( valueObj ( tmp ) ) . html ( ) . replace ( />/g , ">" ) , tmp , "Escaped html" ) ;
2012-11-19 14:50:19 +00:00
tmp = "x" + tmp ;
2012-12-04 18:21:47 +00:00
equal ( div . html ( valueObj ( tmp ) ) . html ( ) . replace ( />/g , ">" ) , tmp , "Escaped html, leading x" ) ;
tmp = " " + tmp . slice ( 1 ) ;
equal ( div . html ( valueObj ( tmp ) ) . html ( ) . replace ( />/g , ">" ) , tmp , "Escaped html, leading space" ) ;
2012-11-19 14:50:19 +00:00
actual = [ ] ; expected = [ ] ; tmp = { } ;
jQuery ( "#nonnodes" ) . contents ( ) . html ( valueObj ( "<b>bold</b>" ) ) . each ( function ( ) {
var html = jQuery ( this ) . html ( ) ;
tmp [ this . nodeType ] = true ;
expected . push ( this . nodeType === 1 ? "<b>bold</b>" : undefined ) ;
actual . push ( html ? html . toLowerCase ( ) : html ) ;
} ) ;
deepEqual ( actual , expected , "Set containing element, text node, comment" ) ;
2012-12-04 18:21:47 +00:00
ok ( tmp [ 1 ] , "element" ) ;
ok ( tmp [ 3 ] , "text node" ) ;
ok ( tmp [ 8 ] , "comment" ) ;
2012-11-19 14:50:19 +00:00
actual = [ ] ; expected = [ ] ;
2013-02-19 04:52:29 +00:00
fixture . children ( "div" ) . html ( valueObj ( "<b>test</b>" ) ) . each ( function ( ) {
2012-11-19 14:50:19 +00:00
expected . push ( "B" ) ;
actual . push ( childNodeNames ( this ) ) ;
} ) ;
2012-12-11 00:07:07 +00:00
equal ( expected . length , 7 , "Expecting many parents" ) ;
2012-11-19 14:50:19 +00:00
deepEqual ( actual , expected , "Correct childNodes after setting HTML" ) ;
2009-07-21 09:17:33 +00:00
2012-11-19 14:50:19 +00:00
actual = [ ] ; expected = [ ] ;
fixture . html ( valueObj ( "<style>.foobar{color:green;}</style>" ) ) . each ( function ( ) {
expected . push ( "STYLE" ) ;
actual . push ( childNodeNames ( this ) ) ;
} ) ;
equal ( expected . length , 1 , "Expecting one parent" ) ;
deepEqual ( actual , expected , "Found the inserted style element" ) ;
2009-07-21 09:17:33 +00:00
2012-11-19 14:50:19 +00:00
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
2012-11-19 14:50:19 +00:00
tmp = fixture . html (
valueObj ( [
"<script type='something/else'>ok( false, 'evaluated: non-script' );</script>" ,
"<script type='text/javascript'>ok( true, 'evaluated: text/javascript' );</script>" ,
"<script type='text/ecmascript'>ok( true, 'evaluated: text/ecmascript' );</script>" ,
"<script>ok( true, 'evaluated: no type' );</script>" ,
"<div>" ,
"<script type='something/else'>ok( false, 'evaluated: inner non-script' );</script>" ,
"<script type='text/javascript'>ok( true, 'evaluated: inner text/javascript' );</script>" ,
"<script type='text/ecmascript'>ok( true, 'evaluated: inner text/ecmascript' );</script>" ,
"<script>ok( true, 'evaluated: inner no type' );</script>" ,
"</div>"
] . join ( "" ) )
) . find ( "script" ) ;
equal ( tmp . length , 8 , "All script tags remain." ) ;
2012-12-04 18:21:47 +00:00
equal ( tmp [ 0 ] . type , "something/else" , "Non-evaluated type." ) ;
equal ( tmp [ 1 ] . type , "text/javascript" , "Evaluated type." ) ;
2012-11-19 14:50:19 +00:00
fixture . html ( valueObj ( "<script type='text/javascript'>ok( true, 'Injection of identical script' );</script>" ) ) ;
fixture . html ( valueObj ( "<script type='text/javascript'>ok( true, 'Injection of identical script' );</script>" ) ) ;
fixture . html ( valueObj ( "<script type='text/javascript'>ok( true, 'Injection of identical script' );</script>" ) ) ;
fixture . html ( valueObj ( "foo <form><script type='text/javascript'>ok( true, 'Injection of identical script (#975)' );</script></form>" ) ) ;
jQuery . scriptorder = 0 ;
fixture . html ( valueObj ( [
"<script>" ,
"equal( jQuery('#scriptorder').length, 1,'Execute after html' );" ,
"equal( jQuery.scriptorder++, 0, 'Script is executed in order' );" ,
"</script>" ,
"<span id='scriptorder'><script>equal( jQuery.scriptorder++, 1, 'Script (nested) is executed in order');</script></span>" ,
"<script>equal( jQuery.scriptorder++, 2, 'Script (unnested) is executed in order' );</script>"
] . join ( "" ) ) ) ;
QUnit . reset ( ) ;
fixture . html ( valueObj ( fixture . text ( ) ) ) ;
ok ( /^[^<]*[^<\s][^<]*$/ . test ( fixture . html ( ) ) , "Replace html with text" ) ;
2012-06-21 19:30:24 +00:00
} ;
2009-07-12 20:19:43 +00:00
2012-12-04 18:21:47 +00:00
test ( "html(String)" , function ( ) {
2012-11-19 14:50:19 +00:00
testHtml ( manipulationBareObj ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "html(Function)" , function ( ) {
2012-11-19 14:50:19 +00:00
testHtml ( manipulationFunctionReturningObj ) ;
2009-12-10 04:57:19 +00:00
} ) ;
2009-07-12 20:19:43 +00:00
2012-12-04 18:21:47 +00:00
test ( "html(Function) with incoming value" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 18 ) ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
var els , actualhtml , pass , j , $div , $div2 , insert ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
els = jQuery ( "#foo > p" ) ;
actualhtml = els . map ( function ( ) {
return jQuery ( this ) . html ( ) ;
} ) ;
els . html ( function ( i , val ) {
equal ( val , actualhtml [ 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
2012-12-04 18:21:47 +00:00
pass = true ;
els . each ( function ( ) {
2010-01-07 18:34:16 +00:00
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
2012-12-04 18:21:47 +00:00
j = jQuery ( "#nonnodes" ) . contents ( ) ;
actualhtml = j . map ( function ( ) {
return jQuery ( this ) . html ( ) ;
} ) ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
j . html ( function ( i , val ) {
equal ( val , actualhtml [ 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
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +00:00
$div = jQuery ( "<div />" ) ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
equal ( $div . html ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
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
2012-12-04 18:21:47 +00:00
equal ( $div . html ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
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
2012-12-04 18:21:47 +00:00
$div2 = jQuery ( "<div/>" ) ;
insert = "<div>hello1</div>" ;
equal ( $div2 . html ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
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
2012-12-04 18:21:47 +00:00
equal ( $div2 . html ( function ( i , val ) {
2011-11-06 20:27:42 +00:00
equal ( val . replace ( />/g , ">" ) , insert , "Make sure the incoming value is correct." ) ;
2010-01-07 18:34:16 +00:00
return "x" + insert ;
2012-12-04 18:21:47 +00:00
} ) . html ( ) . replace ( />/g , ">" ) , "x" + insert , "Verify escaped insertion." ) ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +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 ;
2012-12-04 18:21:47 +00:00
} ) . html ( ) . replace ( />/g , ">" ) , " " + insert , "Verify escaped insertion." ) ;
2010-01-07 18:34:16 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "clone()/html() don't expose jQuery/Sizzle expandos (#12858)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2012-12-05 02:50:22 +00:00
2012-11-10 04:43:46 +00:00
var $content = jQuery ( "<div><b><i>text</i></b></div>" ) . appendTo ( "#qunit-fixture" ) ,
expected = /^<b><i>text<\/i><\/b>$/i ;
2013-02-19 04:52:29 +00:00
// Attach jQuery and Sizzle data (the latter with a non-qSA nth-child)
try {
$content . find ( ":nth-child(1):lt(4)" ) . data ( "test" , true ) ;
// But don't break on a non-Sizzle build
} catch ( e ) {
$content . find ( "*" ) . data ( "test" , true ) ;
}
2012-11-10 04:43:46 +00:00
2012-12-04 18:21:47 +00:00
ok ( expected . test ( $content . clone ( false ) [ 0 ] . innerHTML ) , "clone()" ) ;
2012-11-10 04:43:46 +00:00
ok ( expected . test ( $content . html ( ) ) , "html()" ) ;
} ) ;
2012-12-04 18:21:47 +00:00
var testRemove = function ( method ) {
2013-02-19 04:52:29 +00:00
var first = jQuery ( "#ap" ) . children ( ) . first ( ) ;
2012-06-21 19:30:24 +00:00
2009-07-21 09:17:33 +00:00
first . data ( "foo" , "bar" ) ;
2012-12-04 18:21:47 +00:00
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
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
equal ( first . data ( "foo" ) , method == "remove" ? null : "bar" , "first data" ) ;
2009-07-21 09:17:33 +00:00
2010-07-28 15:19:01 +00:00
QUnit . reset ( ) ;
2012-12-04 18:21:47 +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
2012-12-04 18:21:47 +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" ) ;
2012-12-04 18:21:47 +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 ( ) ;
}
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
} ;
2011-01-09 21:58:47 +00:00
2012-12-04 18:21:47 +00:00
test ( "remove()" , 8 , function ( ) {
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
testRemove ( "remove" ) ;
} ) ;
2009-07-21 09:17:33 +00:00
2012-12-04 18:21:47 +00:00
test ( "remove() event cleaning " , 1 , function ( ) {
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
var count , first , cleanUp ;
2012-06-21 19:30:24 +00:00
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
count = 0 ;
2013-02-19 04:52:29 +00:00
first = jQuery ( "#ap" ) . children ( ) . first ( ) ;
2013-01-27 04:48:59 +00:00
cleanUp = first . on ( "click" , function ( ) {
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
count ++ ;
2013-01-27 04:48:59 +00:00
} ) . remove ( ) . appendTo ( "#qunit-fixture" ) . trigger ( "click" ) ;
2012-06-21 19:30:24 +00:00
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
strictEqual ( 0 , count , "Event handler has been removed" ) ;
2010-12-07 01:37:16 +00:00
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
// Clean up detached data
2011-01-09 21:58:47 +00:00
cleanUp . remove ( ) ;
2009-07-21 09:17:33 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "detach()" , 8 , function ( ) {
2009-07-21 09:17:33 +00:00
testRemove ( "detach" ) ;
2009-03-18 21:15:38 +00:00
} ) ;
2012-12-04 18:21:47 +00:00
test ( "detach() event cleaning " , 1 , function ( ) {
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
var count , first , cleanUp ;
count = 0 ;
2013-02-19 04:52:29 +00:00
first = jQuery ( "#ap" ) . children ( ) . first ( ) ;
2013-01-27 04:48:59 +00:00
cleanUp = first . on ( "click" , function ( ) {
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
count ++ ;
2013-01-27 04:48:59 +00:00
} ) . detach ( ) . appendTo ( "#qunit-fixture" ) . trigger ( "click" ) ;
Implement expectation test instead of using _removeData. Close gh-997.
* Removed inline usage of QUnit.reset() because it is messing with the
expectation model as reset does .empty() which does a recursive cleanData
on everything in #qunit-fixture, so any expectJqData above .reset() would
fail negatively.
Instead of calling reset inline, either updated the following assertions to
take previous assertions' state into account, or broke the test() up into
2 tests at the point where it would call QUnit.reset.
* After introducing the new memory leak discovery a whole bunch of tests were
failing as they didn't clean up everything. However I didn't (yet) add
QUnit.expectJqData calls all over the place because in most if not all of
these cases it is valid data storage. For example in test "data()", there
will be an internal data key for "parsedAttrs". This particular test isn't
intending to test for memory leaks, so therefor I made the new discovery
system only push failures when the test contains at least 1 call to
QUnit.expectJqData.
When not, we'll assume that whatever data is being stored is acceptable
because the relevant elements still exist in the DOM anyway (QUnit.reset
will remove the elements and clean up the data automatically).
I did add a "Always check jQuery.data" mode in the test suite that will
trigger it everywhere. Maybe one day we'll include a call to everywhere,
but for now I'm keeping the status quo: Only consider data left in storage
to be a problem if the test says so ("opt-in").
* Had to move #fx-tests inside the fixture because ".remove()" test would
otherwise remove stuff permanently and cause random other tests to fail
as "#hide div" would yield an empty collection.
(Why wasn't this in the fixture in the first place?)
As a result moving fx-tests into the fixture a whole bunch of tests failed
that relied on arbitrary stuff about the document-wide or fixture-wide
state (e.g. number of divs etc.). So I had to adjust various tests to
limit their sample data to not be so variable and unlimited...
* Moved out tests for expando cleanup into a separate test.
* Fixed implied global variable 'pass' in effects.js that was causing
"TypeError: boolean is not a function" in *UNRELATED* dimensions.js that
uses a global variable "pass = function () {};" ...
* Removed spurious calls to _removeData. The new test exposed various failures
e.g. where div[0] isn't being assigned any data anyway.
(queue.js and attributes.js toggleClass).
* Removed spurious clean up at the bottom of test() functions that are
already covered by the teardown (calling QUnit.reset or removeClass to
supposedly undo any changes).
* Documented the parentheses-less magic line in toggleClass. It appeared that
it would always keep the current class name if there was any (since the
assignment started with "this.className || ...".
Adding parentheses + spacing is 8 bytes (though only 1 in gzip apparently).
Only added the comment for now, though I prefer clarity with logical
operators, I'd rather not face the yayMinPD[1] in this test-related commit.
* Updated QUnit urlConfig to the new format (raw string is deprecated).
* Clean up odd htmlentities in test titles, QUnit escapes this.
(^\s+test\(.*)(>\;) → $1>
(^\s+test\(.*)(<\;) → $1<
[1] jQuery MinJsGz Release Police Department (do the same, download less)
2012-10-17 08:33:47 +00:00
strictEqual ( 1 , count , "Event handler has not been removed" ) ;
// Clean up detached data
cleanUp . remove ( ) ;
} ) ;
2009-03-18 21:15:38 +00:00
test ( "empty()" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 3 ) ;
2012-12-05 02:50:22 +00:00
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
} ) ;
2012-12-04 18:21:47 +00:00
test ( "jQuery.cleanData" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +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 ( ) {
2013-01-27 04:48:59 +00:00
var div = jQuery ( "<div class='outer'><div class='inner'></div></div>" ) . on ( "click" , function ( ) {
2010-01-24 02:20:19 +00:00
ok ( true , type + " " + pos + " Click event fired." ) ;
2013-01-27 04:48:59 +00:00
} ) . on ( "focus" , function ( ) {
2010-01-24 02:20:19 +00:00
ok ( true , type + " " + pos + " Focus event fired." ) ;
2013-01-27 04:48:59 +00:00
} ) . find ( "div" ) . on ( "click" , function ( ) {
2010-01-24 02:20:19 +00:00
ok ( false , type + " " + pos + " Click event fired." ) ;
2013-01-27 04:48:59 +00:00
} ) . on ( "focus" , function ( ) {
2010-01-24 02:20:19 +00:00
ok ( false , type + " " + pos + " Focus event fired." ) ;
} ) . end ( ) . appendTo ( "body" ) ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
div [ 0 ] . detachEvent = div [ 0 ] . removeEventListener = function ( t ) {
2010-01-24 02:20:19 +00:00
ok ( true , type + " Outer " + t + " event unbound" ) ;
} ;
2010-12-07 01:37:16 +00:00
2012-12-04 18:21:47 +00:00
div [ 0 ] . firstChild . detachEvent = div [ 0 ] . firstChild . removeEventListener = function ( t ) {
2010-01-24 02:20:19 +00:00
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
2012-12-04 18:21:47 +00:00
test ( "jQuery.buildFragment - no plain-text caching (Bug #6779)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 1 ) ;
2010-12-27 19:43:52 +00:00
// DOM manipulation fails if added text matches an Object method
2012-12-04 18:21:47 +00:00
var i ,
$f = jQuery ( "<div />" ) . appendTo ( "#qunit-fixture" ) ,
2010-12-27 19:43:52 +00:00
bad = [ "start-" , "toString" , "hasOwnProperty" , "append" , "here&there!" , "-end" ] ;
2012-12-04 18:21:47 +00:00
for ( i = 0 ; i < bad . length ; i ++ ) {
2010-12-27 19:43:52 +00:00
try {
2012-12-04 18:21:47 +00:00
$f . append ( bad [ i ] ) ;
2010-12-27 19:43:52 +00:00
}
2012-12-04 18:21:47 +00:00
catch ( e ) { }
2010-12-27 19:43:52 +00:00
}
2012-12-04 18:21:47 +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 ( ) {
2012-12-04 18:21:47 +00:00
2011-05-11 15:43:37 +00:00
expect ( 3 ) ;
2011-04-30 14:42:36 +00:00
2012-12-04 18:21:47 +00:00
jQuery ( [
"<script type='text/javascript'>" ,
"<!--" ,
"ok( true, '<!-- handled' );" ,
"//-->" ,
"</script>"
] . join ( "\n" ) ) . appendTo ( "#qunit-fixture" ) ;
jQuery ( [
"<script type='text/javascript'>" ,
"<![CDATA[" ,
"ok( true, '<![CDATA[ handled' );" ,
"//]]>" ,
"</script>"
] . join ( "\n" ) ) . appendTo ( "#qunit-fixture" ) ;
jQuery ( [
"<script type='text/javascript'>" ,
"<!--//--><![CDATA[//><!--" ,
"ok( true, '<!--//--><![CDATA[//><!-- (Drupal case) handled' );" ,
"//--><!]]>" ,
"</script>"
] . join ( "\n" ) ) . appendTo ( "#qunit-fixture" ) ;
} ) ;
test ( "jQuery.buildFragment - plain objects are not a document #8950" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 1 ) ;
2011-05-13 16:26:17 +00:00
2012-12-04 18:21:47 +00:00
try {
jQuery ( "<input type='hidden'>" , { } ) ;
ok ( true , "Does not allow attribute object to be treated like a doc object" ) ;
} catch ( e ) { }
2011-04-30 14:42:36 +00:00
} ) ;
2011-06-15 15:14:52 +00:00
2012-12-04 18:21:47 +00:00
test ( "jQuery.clone - no exceptions for object elements #9587" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 1 ) ;
2011-06-15 15:14:52 +00:00
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
2012-12-04 18:21:47 +00:00
test ( "jQuery(<tag>) & wrap[Inner/All]() handle unknown elems (#10667)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2011-11-08 02:22:04 +00:00
var $wraptarget = jQuery ( "<div id='wrap-target'>Target</div>" ) . appendTo ( "#qunit-fixture" ) ,
2012-12-04 18:21:47 +00:00
$section = jQuery ( "<section>" ) . appendTo ( "#qunit-fixture" ) ;
2011-11-08 02:22:04 +00:00
$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
} ) ;
2012-12-04 18:21:47 +00:00
test ( "Cloned, detached HTML5 elems (#10667,10670)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 7 ) ;
2011-11-08 02:22:04 +00:00
2012-12-04 18:21:47 +00:00
var $clone ,
$section = jQuery ( "<section>" ) . appendTo ( "#qunit-fixture" ) ;
2011-11-08 02:22:04 +00:00
// First clone
$clone = $section . clone ( ) ;
// Infer that the test is being run in IE<=8
2012-12-04 18:21:47 +00:00
if ( $clone [ 0 ] . outerHTML && ! jQuery . support . opacity ) {
2011-11-08 02:22:04 +00:00
// This branch tests cloning nodes by reading the outerHTML, used only in IE<=8
2012-12-04 18:21:47 +00:00
equal ( $clone [ 0 ] . outerHTML , "<section></section>" , "detached clone outerHTML matches '<section></section>'" ) ;
2011-11-08 02:22:04 +00:00
} else {
// This branch tests a known behaviour in modern browsers that should never fail.
// Included for expected test count symmetry (expecting 1)
2012-12-04 18:21:47 +00:00
equal ( $clone [ 0 ] . nodeName , "SECTION" , "detached clone nodeName matches 'SECTION' in modern browsers" ) ;
2011-11-08 02:22:04 +00:00
}
// 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
2012-12-04 18:21:47 +00:00
$clone . trigger ( "click" ) ;
$clone . unbind ( "click" ) ;
2011-11-08 02:22:04 +00:00
// Add a child node with text to the original
2012-12-04 18:21:47 +00:00
$section . append ( "<p>Hello</p>" ) ;
2011-11-08 02:22:04 +00:00
// 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
2012-12-04 18:21:47 +00:00
$clone . trigger ( "click" ) ;
$clone . unbind ( "click" ) ;
2011-11-08 02:22:04 +00:00
// 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
2012-12-04 18:21:47 +00:00
$section . trigger ( "click" ) ;
2011-11-08 02:22:04 +00:00
// Unbind any remaining events
2012-12-04 18:21:47 +00:00
$section . unbind ( "click" ) ;
$clone . unbind ( "click" ) ;
2011-11-08 02:22:04 +00:00
} ) ;
2011-11-08 05:05:33 +00:00
2012-12-04 18:21:47 +00:00
test ( "Guard against exceptions when clearing safeChildNodes" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-03-06 15:22:58 +00:00
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
2012-12-04 18:21:47 +00:00
test ( "Ensure oldIE creates a new set on appendTo (#8894)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-10-15 16:19:20 +00:00
expect ( 5 ) ;
2012-12-12 22:05:50 +00:00
strictEqual ( jQuery ( "<div/>" ) . clone ( ) . addClass ( "test" ) . appendTo ( "<div/>" ) . end ( ) . end ( ) . hasClass ( "test" ) , false , "Check jQuery.fn.appendTo after jQuery.clone" ) ;
strictEqual ( jQuery ( "<div/>" ) . find ( "p" ) . end ( ) . addClass ( "test" ) . appendTo ( "<div/>" ) . end ( ) . end ( ) . hasClass ( "test" ) , false , "Check jQuery.fn.appendTo after jQuery.fn.find" ) ;
strictEqual ( jQuery ( "<div/>" ) . text ( "test" ) . addClass ( "test" ) . appendTo ( "<div/>" ) . end ( ) . end ( ) . hasClass ( "test" ) , false , "Check jQuery.fn.appendTo after jQuery.fn.text" ) ;
strictEqual ( jQuery ( "<bdi/>" ) . clone ( ) . addClass ( "test" ) . appendTo ( "<div/>" ) . end ( ) . end ( ) . hasClass ( "test" ) , false , "Check jQuery.fn.appendTo after clone html5 element" ) ;
2012-04-17 01:57:41 +00:00
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
2012-12-04 18:21:47 +00:00
test ( "html() - script exceptions bubble (#11743)" , function ( ) {
2012-12-05 02:50:22 +00:00
2013-01-08 13:04:00 +00:00
expect ( 3 ) ;
2012-05-31 15:31:13 +00:00
raises ( function ( ) {
2013-01-08 13:04:00 +00:00
jQuery ( "#qunit-fixture" ) . html ( "<script>undefined(); ok( false, 'Exception not thrown' );</script>" ) ;
ok ( false , "Exception ignored" ) ;
} , "Exception bubbled from inline script" ) ;
var onerror = window . onerror ;
window . onerror = function ( ) {
ok ( true , "Exception thrown in remote script" ) ;
window . onerror = onerror ;
} ;
jQuery ( "#qunit-fixture" ) . html ( "<script src='data/badcall.js'></script>" ) ;
ok ( true , "Exception ignored" ) ;
2012-05-31 15:31:13 +00:00
} ) ;
2012-07-26 02:23:24 +00:00
2012-12-04 18:21:47 +00:00
test ( "checked state is cloned with clone()" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2012-07-26 02:23:24 +00:00
2012-12-04 18:21:47 +00:00
var elem = jQuery . parseHTML ( "<input type='checkbox' checked='checked'/>" ) [ 0 ] ;
2012-07-26 02:23:24 +00:00
elem . checked = false ;
2012-12-04 18:21:47 +00:00
equal ( jQuery ( elem ) . clone ( ) . attr ( "id" , "clone" ) [ 0 ] . checked , false , "Checked false state correctly cloned" ) ;
2012-10-16 14:17:14 +00:00
2012-12-04 18:21:47 +00:00
elem = jQuery . parseHTML ( "<input type='checkbox'/>" ) [ 0 ] ;
2012-07-26 02:23:24 +00:00
elem . checked = true ;
2012-12-04 18:21:47 +00:00
equal ( jQuery ( elem ) . clone ( ) . attr ( "id" , "clone" ) [ 0 ] . checked , true , "Checked true state correctly cloned" ) ;
2012-07-26 02:23:24 +00:00
} ) ;
2012-08-23 01:23:50 +00:00
2012-12-04 18:21:47 +00:00
test ( "manipulate mixed jQuery and text (#12384, #12346)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2012-08-28 21:00:12 +00:00
var div = jQuery ( "<div>a</div>" ) . append ( " " , jQuery ( "<span>b</span>" ) , " " , jQuery ( "<span>c</span>" ) ) ,
2012-12-04 18:21:47 +00:00
nbsp = String . fromCharCode ( 160 ) ;
2012-12-05 02:50:22 +00:00
2012-08-28 21:00:12 +00:00
equal ( div . text ( ) , "a" + nbsp + "b" + nbsp + "c" , "Appending mixed jQuery with text nodes" ) ;
div = jQuery ( "<div><div></div></div>" )
. find ( "div" )
2012-12-04 18:21:47 +00:00
. after ( "<p>a</p>" , "<p>b</p>" )
2012-08-28 21:00:12 +00:00
. 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 ) ;
} ) ;
2012-11-19 14:50:19 +00:00
2012-12-04 18:21:47 +00:00
test ( "script evaluation (#11795)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 11 ) ;
2012-11-19 14:50:19 +00:00
var scriptsIn , scriptsOut ,
fixture = jQuery ( "#qunit-fixture" ) . empty ( ) ,
2012-12-04 18:21:47 +00:00
objGlobal = ( function ( ) {
return this ;
} ) ( ) ,
2012-11-19 14:50:19 +00:00
isOk = objGlobal . ok ,
notOk = function ( ) {
var args = arguments ;
2012-12-04 18:21:47 +00:00
args [ 0 ] = ! args [ 0 ] ;
2012-11-19 14:50:19 +00:00
return isOk . apply ( this , args ) ;
} ;
objGlobal . ok = notOk ;
scriptsIn = jQuery ( [
"<script type='something/else'>ok( false, 'evaluated: non-script' );</script>" ,
"<script type='text/javascript'>ok( true, 'evaluated: text/javascript' );</script>" ,
"<script type='text/ecmascript'>ok( true, 'evaluated: text/ecmascript' );</script>" ,
"<script>ok( true, 'evaluated: no type' );</script>" ,
"<div>" ,
"<script type='something/else'>ok( false, 'evaluated: inner non-script' );</script>" ,
"<script type='text/javascript'>ok( true, 'evaluated: inner text/javascript' );</script>" ,
"<script type='text/ecmascript'>ok( true, 'evaluated: inner text/ecmascript' );</script>" ,
"<script>ok( true, 'evaluated: inner no type' );</script>" ,
"</div>"
] . join ( "" ) ) ;
scriptsIn . appendTo ( jQuery ( "<div class='detached'/>" ) ) ;
objGlobal . ok = isOk ;
scriptsOut = fixture . append ( scriptsIn ) . find ( "script" ) ;
2012-12-04 18:21:47 +00:00
equal ( scriptsOut [ 0 ] . type , "something/else" , "Non-evaluated type." ) ;
equal ( scriptsOut [ 1 ] . type , "text/javascript" , "Evaluated type." ) ;
2012-11-19 14:50:19 +00:00
deepEqual ( scriptsOut . get ( ) , fixture . find ( "script" ) . get ( ) , "All script tags remain." ) ;
objGlobal . ok = notOk ;
scriptsOut = scriptsOut . add ( scriptsOut . clone ( ) ) . appendTo ( fixture . find ( "div" ) ) ;
deepEqual ( fixture . find ( "div script" ) . get ( ) , scriptsOut . get ( ) , "Scripts cloned without reevaluation" ) ;
fixture . append ( scriptsOut . detach ( ) ) ;
2013-02-19 04:52:29 +00:00
deepEqual ( fixture . children ( "script" ) . get ( ) , scriptsOut . get ( ) , "Scripts detached without reevaluation" ) ;
2012-11-19 14:50:19 +00:00
objGlobal . ok = isOk ;
} ) ;
2012-12-04 18:21:47 +00:00
test ( "wrapping scripts (#10470)" , function ( ) {
2012-12-05 02:50:22 +00:00
2012-12-04 18:21:47 +00:00
expect ( 2 ) ;
2012-11-19 14:50:19 +00:00
var script = document . createElement ( "script" ) ;
2012-12-04 18:21:47 +00:00
script . text = script . textContent = "ok( !document.eval10470, 'script evaluated once' ); document.eval10470 = true;" ;
2012-11-19 14:50:19 +00:00
document . eval10470 = false ;
jQuery ( "#qunit-fixture" ) . empty ( ) [ 0 ] . appendChild ( script ) ;
jQuery ( "#qunit-fixture script" ) . wrap ( "<b></b>" ) ;
2012-12-04 18:21:47 +00:00
strictEqual ( script . parentNode , jQuery ( "#qunit-fixture > b" ) [ 0 ] , "correctly wrapped" ) ;
2012-11-19 14:50:19 +00:00
jQuery ( script ) . remove ( ) ;
2012-12-05 02:50:22 +00:00
} ) ;
2012-12-10 21:12:54 +00:00
test ( "insertAfter, insertBefore, etc do not work when destination is original element. Element is removed (#4087)" , function ( ) {
expect ( 10 ) ;
var elems ;
jQuery . each ( [
"appendTo" ,
"prependTo" ,
"insertBefore" ,
"insertAfter" ,
"replaceAll"
] , function ( index , name ) {
elems = jQuery ( [
"<ul id='test4087-complex'><li class='test4087'><div>c1</div>h1</li><li><div>c2</div>h2</li></ul>" ,
"<div id='test4087-simple'><div class='test4087-1'>1<div class='test4087-2'>2</div><div class='test4087-3'>3</div></div></div>" ,
"<div id='test4087-multiple'><div class='test4087-multiple'>1</div><div class='test4087-multiple'>2</div></div>"
2012-12-12 22:05:50 +00:00
] . join ( "" ) ) . appendTo ( "#qunit-fixture" ) ;
2012-12-10 21:12:54 +00:00
// complex case based on http://jsfiddle.net/pbramos/gZ7vB/
jQuery ( "#test4087-complex div" ) [ name ] ( "#test4087-complex li:last-child div:last-child" ) ;
equal ( jQuery ( "#test4087-complex li:last-child div" ) . length , name === "replaceAll" ? 1 : 2 , name + " a node to itself, complex case." ) ;
// simple case
jQuery ( ".test4087-1" ) [ name ] ( ".test4087-1" ) ;
equal ( jQuery ( ".test4087-1" ) . length , 1 , name + " a node to itself, simple case." ) ;
// clean for next test
jQuery ( "#test4087-complex" ) . remove ( ) ;
jQuery ( "#test4087-simple" ) . remove ( ) ;
jQuery ( "#test4087-multiple" ) . remove ( ) ;
} ) ;
} ) ;
2012-12-19 23:52:08 +00:00
test ( "Index for function argument should be received (#13094)" , 2 , function ( ) {
2012-12-24 00:47:13 +00:00
var i = 0 ;
2012-12-19 23:52:08 +00:00
2012-12-23 16:51:07 +00:00
jQuery ( "<div/><div/>" ) . before ( function ( index ) {
equal ( index , i ++ , "Index should be correct" ) ;
} ) ;
2012-12-19 23:26:55 +00:00
2012-12-19 23:52:08 +00:00
} ) ;
2012-12-20 16:50:00 +00:00
test ( "Make sure jQuery.fn.remove can work on elements in documentFragment" , 1 , function ( ) {
var fragment = document . createDocumentFragment ( ) ,
div = fragment . appendChild ( document . createElement ( "div" ) ) ;
2012-12-23 16:51:07 +00:00
jQuery ( div ) . remove ( ) ;
2012-12-20 16:50:00 +00:00
equal ( fragment . childNodes . length , 0 , "div element was removed from documentFragment" ) ;
} ) ;
2013-01-16 18:07:53 +00:00
test ( "Make sure specific elements with content created correctly (#13232)" , 20 , function ( ) {
var results = [ ] ,
args = [ ] ,
elems = {
thead : "<tr><td>thead</td></tr>" ,
tbody : "<tr><td>tbody</td></tr>" ,
tfoot : "<tr><td>tfoot</td></tr>" ,
colgroup : "<col span='5' />" ,
caption : "caption" ,
tr : "<td>tr</td>" ,
th : "th" ,
td : "<div>td</div>" ,
optgroup : "<option>optgroup</option>" ,
option : "option"
} ;
jQuery . each ( elems , function ( name , value ) {
var html = "<" + name + ">" + value + "</" + name + ">" ;
ok ( jQuery . nodeName ( jQuery . parseHTML ( "<" + name + ">" + value + "</" + name + ">" ) [ 0 ] , name ) , name + " is created correctly" ) ;
results . push ( name ) ;
args . push ( html ) ;
} ) ;
jQuery . fn . append . apply ( jQuery ( "<div/>" ) , args ) . children ( ) . each ( function ( i ) {
ok ( jQuery . nodeName ( this , results [ i ] ) ) ;
} ) ;
} ) ;