Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian....@packages.debian.org
Usertags: pu

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Dear Release Team,

[ Reason ]

I would like to fix CVE-2020-11022 and CVE-2020-11023.  The same fix has
been prepared for stretch and will be uploaded concurrently with the
buster fix.  The security team has marked these issues as no-dsa.

[ Impact ]

jquery would be vulnerable if not approved.

[ Tests ]

Backported patch was reviewed and approved by the Debian package
maintainers.  Sadly, no reproducers were released.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them, along with the
      maintainers of jquery
  [x] attach debdiff against the package in (old)stable
  [N/A] the issue is verified as fixed in unstable (jquery is not
        present in unstable/testing)

Regards,

- -Roberto

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEIYZ1DR4ae5UL01q7ldFmTdL1kUIFAmBH//4ACgkQldFmTdL1
kULu7w/+KzQq0SMV/rDPj/BUs+wyoeqGfvLiMhOcA019wDblB17wW2x/4kWQWCMa
75tXD7kep+6b1lLNBPj75fcC9xHNiV9XTGgAwViHOBQ85bxfbc1Zi0YEnXfrgjeG
vi1xtHeLUNgDrCG/+UQP8qJn7+asURfism9v1WhmH93jd8+J9AleHOvUR0WjUVz2
tKIHXPBNQ0yDbJO34HXzvXio7IvJxXlNZ+ivK0AlUQVwam1LThy+tCk4hob8NXQg
JGvomGG/GDbMnQ/yNMc3IRHVDas0nLbmaa026kcHE05pQjhdPYOYckL/Jl5MW84s
5L+foc1dfAi7A4a3Bo898FDkaJqD41VCAgKjUbjD0aBc38D310ksqGlep3scOqn0
uX5GUCWcvTg05OHCKGrd28YyYckUDDRaL1Ln0MtSfYGQGgG3DyXqAGpAPCxA6PeW
gGMuBDy3t68kkCQoAqYzqkpn/oTS+3T6LWm35/c2X5FJAChM9gsDAaJ3IaofX84x
pzPu6VX7O3cPLMaV7cBKj4Ix85iBdKNHKRZlbruiCxRtzWgiMyyDLhsaj4Fbp989
hWddYqdb6Wj01CCAoDkHvsfg6GuSd/WGiEt1MCP0EqDUQ6WRJjmugELCThYj7c3U
PXxNmveHtehpN7+5MG1lNlLJ8hLydLS5CfphwwCrsOF2+MfRzRk=
=WoIV
-----END PGP SIGNATURE-----
diff -Nru jquery-3.3.1~dfsg/debian/changelog jquery-3.3.1~dfsg/debian/changelog
--- jquery-3.3.1~dfsg/debian/changelog  2019-04-19 02:52:35.000000000 -0400
+++ jquery-3.3.1~dfsg/debian/changelog  2021-03-09 14:42:16.000000000 -0500
@@ -1,3 +1,13 @@
+jquery (3.3.1~dfsg-3+deb10u1) buster; urgency=high
+
+  * Non-maintainer upload by the LTS Team.
+  * Prevent untrusted code execution when passing untrusted HTML to DOM
+    manipulation methods.  (CVE-2020-11022)
+  * Prevent untrusted code execution when passing HTML containing <option>
+    elements to DOM manipulation methods.  (CVE-2020-11023)
+
+ -- Roberto C. Sánchez <robe...@debian.org>  Tue, 09 Mar 2021 14:42:16 -0500
+
 jquery (3.3.1~dfsg-3) unstable; urgency=medium
 
   * Team upload
diff -Nru jquery-3.3.1~dfsg/debian/patches/CVE-2020-11022.patch 
jquery-3.3.1~dfsg/debian/patches/CVE-2020-11022.patch
--- jquery-3.3.1~dfsg/debian/patches/CVE-2020-11022.patch       1969-12-31 
19:00:00.000000000 -0500
+++ jquery-3.3.1~dfsg/debian/patches/CVE-2020-11022.patch       2021-03-09 
14:42:16.000000000 -0500
@@ -0,0 +1,1749 @@
+From 1d61fd9407e6fbe82fe55cb0b938307aa0791f77 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?=
+ <m.go...@gmail.com>
+Date: Mon, 16 Mar 2020 21:49:29 +0100
+Subject: [PATCH] Manipulation: Make jQuery.htmlPrefilter an identity function
+
+Closes gh-4642
+
+(cherry picked from 90fed4b453a5becdb7f173d9e3c1492390a1441f)
+---
+ src/manipulation.js       |   9 +--
+ test/data/testinit.js     |   2 +-
+ test/localfile.html       |   2 +-
+ test/unit/ajax.js         |   8 +--
+ test/unit/attributes.js   |  46 ++++++-------
+ test/unit/basic.js        |  24 +++----
+ test/unit/core.js         |  14 ++--
+ test/unit/css.js          | 112 +++++++++++++++----------------
+ test/unit/data.js         |  20 +++---
+ test/unit/deprecated.js   |   2 +-
+ test/unit/dimensions.js   |  30 ++++-----
+ test/unit/effects.js      |  22 +++---
+ test/unit/event.js        |  26 +++----
+ test/unit/manipulation.js | 138 ++++++++++++++++++--------------------
+ test/unit/offset.js       |  10 +--
+ test/unit/selector.js     |   4 +-
+ test/unit/traversing.js   |  22 +++---
+ test/unit/wrap.js         |  12 ++--
+ 18 files changed, 246 insertions(+), 257 deletions(-)
+
+--- a/src/manipulation.js
++++ b/src/manipulation.js
+@@ -32,13 +32,6 @@
+ 
+ var
+ 
+-      /* eslint-disable max-len */
+-
+-      // See https://github.com/eslint/eslint/issues/3229
+-      rxhtmlTag = 
/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+-
+-      /* eslint-enable */
+-
+       // Support: IE <=10 - 11, Edge 12 - 13 only
+       // In IE/Edge using regex groups here causes severe slowdowns.
+       // See https://connect.microsoft.com/IE/feedback/details/1736512/
+@@ -235,7 +228,7 @@
+ 
+ jQuery.extend( {
+       htmlPrefilter: function( html ) {
+-              return html.replace( rxhtmlTag, "<$1></$2>" );
++              return html;
+       },
+ 
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+--- a/test/data/testinit.js
++++ b/test/data/testinit.js
+@@ -244,7 +244,7 @@
+       }
+       wrapper.call( QUnit, title, function( assert ) {
+               var done = assert.async(),
+-                      $iframe = supportjQuery( "<iframe/>" )
++                      $iframe = supportjQuery( "<iframe></iframe>" )
+                               .css( { position: "absolute", top: "0", left: 
"-600px", width: "500px" } )
+                               .attr( { id: "qunit-fixture-iframe", src: url( 
fileName ) } );
+ 
+--- a/test/localfile.html
++++ b/test/localfile.html
+@@ -49,7 +49,7 @@
+       <script>
+               var logUL = jQuery( "#log" );
+               function doLog( message, args ) {
+-                      jQuery( "<li />").appendTo( logUL ).text( message + ': 
"' + Array.prototype.join.call( args, '" - "' ) + '"' );
++                      jQuery( "<li></li>" ).appendTo( logUL ).text( message + 
': "' + Array.prototype.join.call( args, '" - "' ) + '"' );
+               }
+               jQuery.ajax( "./data/badjson.js" , {
+                       context: jQuery( "#success" ),
+--- a/test/unit/ajax.js
++++ b/test/unit/ajax.js
+@@ -2352,7 +2352,7 @@
+ 
+               addGlobalEvents( "ajaxStart ajaxStop ajaxSend ajaxComplete 
ajaxError", assert )();
+               jQuery( document ).ajaxStop( done );
+-              jQuery( "<div/>" ).load( baseURL + "404.txt", function() {
++              jQuery( "<div></div>" ).load( baseURL + "404.txt", function() {
+                       assert.ok( true, "complete" );
+               } );
+       } );
+@@ -2445,7 +2445,7 @@
+                               return "Hello World";
+                       }
+               } );
+-              jQuery( "<div/>" ).load( url( "name.html" ), function( 
responseText ) {
++              jQuery( "<div></div>" ).load( url( "name.html" ), function( 
responseText ) {
+                       assert.strictEqual( jQuery( this ).html(), "Hello 
World", "Test div was filled with filtered data" );
+                       assert.strictEqual( responseText, "Hello World", "Test 
callback receives filtered data" );
+                       QUnit.start();
+@@ -2453,7 +2453,7 @@
+       } );
+ 
+       QUnit.asyncTest( "jQuery.fn.load( String, Object, Function )", 2, 
function( assert ) {
+-              jQuery( "<div />" ).load( url( "mock.php?action=echoHtml" ), {
++              jQuery( "<div></div>" ).load( url( "mock.php?action=echoHtml" 
), {
+                       "bar": "ok"
+               }, function() {
+                       var $node = jQuery( this );
+@@ -2466,7 +2466,7 @@
+       QUnit.test( "jQuery.fn.load( String, String, Function )", 2, function( 
assert ) {
+               var done = assert.async();
+ 
+-              jQuery( "<div />" ).load( url( "mock.php?action=echoHtml" ), 
"foo=3&bar=ok", function() {
++              jQuery( "<div></div>" ).load( url( "mock.php?action=echoHtml" 
), "foo=3&bar=ok", function() {
+                       var $node = jQuery( this );
+                       assert.strictEqual( $node.find( "#method" ).text(), 
"GET", "Check method" );
+                       assert.ok( $node.find( "#query" ).text().match( 
/foo=3&bar=ok/ ), "Check if a string of data is passed correctly" );
+--- a/test/unit/attributes.js
++++ b/test/unit/attributes.js
+@@ -93,12 +93,12 @@
+       assert.equal( jQuery( "#area1" ).attr( "maxLength" ), "30", "Check for 
maxLength attribute" );
+ 
+       // using innerHTML in IE causes href attribute to be serialized to the 
full path
+-      jQuery( "<a/>" ).attr( {
++      jQuery( "<a></a>" ).attr( {
+               "id": "tAnchor5",
+               "href": "#5"
+       } ).appendTo( "#qunit-fixture" );
+       assert.equal( jQuery( "#tAnchor5" ).attr( "href" ), "#5", "Check for 
non-absolute href (an anchor)" );
+-      jQuery( "<a id='tAnchor6' href='#5' />" ).appendTo( "#qunit-fixture" );
++      jQuery( "<a id='tAnchor6' href='#5'></a>" ).appendTo( "#qunit-fixture" 
);
+       assert.equal( jQuery( "#tAnchor5" ).prop( "href" ), jQuery( "#tAnchor6" 
).prop( "href" ), "Check for absolute href prop on an anchor" );
+ 
+       jQuery( "<script type='jquery/test' src='#5' id='scriptSrc'></script>" 
).appendTo( "#qunit-fixture" );
+@@ -136,7 +136,7 @@
+       assert.equal( $img.attr( "height" ), "53", "Retrieve height attribute 
on an element with display:none." );
+ 
+       // Check for style support
+-      styleElem = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).css( {
++      styleElem = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).css( {
+               background: "url(UPPERlower.gif)"
+       } );
+       assert.ok( !!~styleElem.attr( "style" ).indexOf( "UPPERlower.gif" ), 
"Check style attribute getter" );
+@@ -158,11 +158,11 @@
+       $a = jQuery( "<a href='#' onclick='something()'>Click</a>" ).appendTo( 
"#qunit-fixture" );
+       assert.equal( $a.attr( "onclick" ), "something()", "Retrieve ^on 
attribute without anonymous function wrapper." );
+ 
+-      assert.ok( jQuery( "<div/>" ).attr( "doesntexist" ) === undefined, 
"Make sure undefined is returned when no attribute is found." );
+-      assert.ok( jQuery( "<div/>" ).attr( "title" ) === undefined, "Make sure 
undefined is returned when no attribute is found." );
+-      assert.equal( jQuery( "<div/>" ).attr( "title", "something" ).attr( 
"title" ), "something", "Set the title attribute." );
++      assert.ok( jQuery( "<div></div>" ).attr( "doesntexist" ) === undefined, 
"Make sure undefined is returned when no attribute is found." );
++      assert.ok( jQuery( "<div></div>" ).attr( "title" ) === undefined, "Make 
sure undefined is returned when no attribute is found." );
++      assert.equal( jQuery( "<div></div>" ).attr( "title", "something" 
).attr( "title" ), "something", "Set the title attribute." );
+       assert.ok( jQuery().attr( "doesntexist" ) === undefined, "Make sure 
undefined is returned when no element is there." );
+-      assert.equal( jQuery( "<div/>" ).attr( "value" ), undefined, "An unset 
value on a div returns undefined." );
++      assert.equal( jQuery( "<div></div>" ).attr( "value" ), undefined, "An 
unset value on a div returns undefined." );
+       assert.strictEqual( jQuery( "<select><option 
value='property'></option></select>" ).attr( "value" ), undefined, "An unset 
value on a select returns undefined." );
+ 
+       $form = jQuery( "#form" ).attr( "enctype", "multipart/form-data" );
+@@ -180,7 +180,7 @@
+ 
+       assert.strictEqual( input.clone( true ).attr( "name", "test" )[ 0 
].name, "test", "Name attribute should be changed on cloned element" );
+ 
+-      div = jQuery( "<div id='tester' />" );
++      div = jQuery( "<div id='tester'></div>" );
+       div.attr( "id" );
+ 
+       assert.strictEqual( div.clone( true ).attr( "id", "test" )[ 0 ].id, 
"test", "Id attribute should be changed on cloned element" );
+@@ -299,7 +299,7 @@
+       $input = jQuery( "<input type='checkbox'/>" ).attr( "checked", true );
+       assert.equal( $input.prop( "checked" ), true, "Setting checked updates 
property (verified by .prop)" );
+       assert.equal( $input[ 0 ].checked, true, "Setting checked updates 
property (verified by native property)" );
+-      $input = jQuery( "<option/>" ).attr( "selected", true );
++      $input = jQuery( "<option></option>" ).attr( "selected", true );
+       assert.equal( $input.prop( "selected" ), true, "Setting selected 
updates property (verified by .prop)" );
+       assert.equal( $input[ 0 ].selected, true, "Setting selected updates 
property (verified by native property)" );
+ 
+@@ -592,7 +592,7 @@
+       assert.expect( 12 );
+       var $first;
+ 
+-      assert.equal( jQuery( "<div class='hello' />" ).removeAttr( "class" 
).attr( "class" ), undefined, "remove class" );
++      assert.equal( jQuery( "<div class='hello'></div>" ).removeAttr( "class" 
).attr( "class" ), undefined, "remove class" );
+       assert.equal( jQuery( "#form" ).removeAttr( "id" ).attr( "id" ), 
undefined, "Remove id" );
+       assert.equal( jQuery( "#foo" ).attr( "style", "position:absolute;" 
).removeAttr( "style" ).attr( "style" ), undefined, "Check removing style 
attribute" );
+       assert.equal( jQuery( "#form" ).attr( "style", "position:absolute;" 
).removeAttr( "style" ).attr( "style" ), undefined, "Check removing style 
attribute on a form" );
+@@ -692,7 +692,7 @@
+       assert.equal( jQuery( "#select2" ).prop( "selectedIndex" ), 3, "Check 
for selectedIndex attribute" );
+       assert.equal( jQuery( "#foo" ).prop( "nodeName" ).toUpperCase(), "DIV", 
"Check for nodeName attribute" );
+       assert.equal( jQuery( "#foo" ).prop( "tagName" ).toUpperCase(), "DIV", 
"Check for tagName attribute" );
+-      assert.equal( jQuery( "<option/>" ).prop( "selected" ), false, "Check 
selected attribute on disconnected element." );
++      assert.equal( jQuery( "<option></option>" ).prop( "selected" ), false, 
"Check selected attribute on disconnected element." );
+ 
+       assert.equal( jQuery( "#listWithTabIndex" ).prop( "tabindex" ), 5, 
"Check retrieving tabindex" );
+       jQuery( "#text1" ).prop( "readonly", true );
+@@ -837,16 +837,16 @@
+ 
+       function addOptions( $elem ) {
+               return $elem.append(
+-                      jQuery( "<option/>" ).val( "a" ).text( "One" ),
+-                      jQuery( "<option/>" ).val( "b" ).text( "Two" ),
+-                      jQuery( "<option/>" ).val( "c" ).text( "Three" )
++                      jQuery( "<option></option>" ).val( "a" ).text( "One" ),
++                      jQuery( "<option></option>" ).val( "b" ).text( "Two" ),
++                      jQuery( "<option></option>" ).val( "c" ).text( "Three" )
+               )
+               .find( "[value=a]" ).prop( "selected", true ).end()
+               .find( "[value=c]" ).prop( "selected", true ).end();
+       }
+ 
+       var $optgroup,
+-              $select = jQuery( "<select/>" );
++              $select = jQuery( "<select></select>" );
+ 
+       // Check select with options
+       addOptions( $select ).appendTo( "#qunit-fixture" );
+@@ -856,7 +856,7 @@
+       $select.empty();
+ 
+       // Check select with optgroup
+-      $optgroup = jQuery( "<optgroup/>" );
++      $optgroup = jQuery( "<optgroup></optgroup>" );
+       addOptions( $optgroup ).appendTo( $select );
+       $select.find( "[value=b]" ).prop( "selected", true );
+ 
+@@ -970,7 +970,7 @@
+       assert.equal( $button.val(), "foobar", "Value retrieval on a button 
does not return innerHTML" );
+       assert.equal( $button.val( "baz" ).html(), "text", "Setting the value 
does not change innerHTML" );
+ 
+-      assert.equal( jQuery( "<option/>" ).val( "test" ).attr( "value" ), 
"test", "Setting value sets the value attribute" );
++      assert.equal( jQuery( "<option></option>" ).val( "test" ).attr( "value" 
), "test", "Setting value sets the value attribute" );
+ } );
+ 
+ QUnit.test( "val() with non-matching values on dropdown list", function( 
assert ) {
+@@ -1029,7 +1029,7 @@
+       assert.equal( document.getElementById( "text1" ).value, "", "Check for 
modified (via val(null)) value of input element" );
+ 
+       var j,
+-              $select = jQuery( "<select multiple><option value='1'/><option 
value='2'/></select>" ),
++              $select = jQuery( "<select multiple><option 
value='1'></option><option value='2'></option></select>" ),
+               $select1 = jQuery( "#select1" );
+ 
+       $select1.val( valueObj( "3" ) );
+@@ -1145,7 +1145,7 @@
+ QUnit.test( "select.val(space characters) (gh-2978)", function( assert ) {
+       assert.expect( 37 );
+ 
+-      var $select = jQuery( "<select/>" ).appendTo( "#qunit-fixture" ),
++      var $select = jQuery( "<select></select>" ).appendTo( "#qunit-fixture" 
),
+               spaces = {
+                       "\\t": {
+                               html: "&#09;",
+@@ -1230,7 +1230,7 @@
+       j.addClass( valueObj( "asdf" ) );
+       assert.ok( j.hasClass( "asdf" ), "Check node,textnode,comment for 
addClass" );
+ 
+-      div = jQuery( "<div/>" );
++      div = jQuery( "<div></div>" );
+ 
+       div.addClass( valueObj( "test" ) );
+       assert.equal( div.attr( "class" ), "test", "Make sure there's no extra 
whitespace." );
+@@ -1669,9 +1669,9 @@
+       assert.expect( 1 );
+ 
+       var area,
+-              map = jQuery( "<map />" );
++              map = jQuery( "<map></map>" );
+ 
+-      area = map.html( "<area shape='rect' coords='0,0,0,0' href='#' alt='a' 
/>" ).find( "area" );
++      area = map.html( "<area shape='rect' coords='0,0,0,0' href='#' 
alt='a'></area>" ).find( "area" );
+       assert.equal( area.attr( "coords" ), "0,0,0,0", "did not retrieve 
coords correctly" );
+ } );
+ 
+@@ -1679,7 +1679,7 @@
+       assert.expect( 1 );
+ 
+       try {
+-              jQuery( "<option/>" ).val();
++              jQuery( "<option></option>" ).val();
+               assert.ok( true );
+       } catch ( _ ) {
+               assert.ok( false );
+--- a/test/unit/basic.js
++++ b/test/unit/basic.js
+@@ -36,7 +36,7 @@
+ QUnit.test( "attributes", function( assert ) {
+       assert.expect( 6 );
+ 
+-      var a = jQuery( "<a/>" ).appendTo( "#qunit-fixture" ),
++      var a = jQuery( "<a></a>" ).appendTo( "#qunit-fixture" ),
+               input = jQuery( "<input/>" ).appendTo( "#qunit-fixture" );
+ 
+       assert.strictEqual( a.attr( "foo", "bar" ).attr( "foo" ), "bar", ".attr 
getter/setter" );
+@@ -56,7 +56,7 @@
+ QUnit.test( "css", function( assert ) {
+       assert.expect( 1 );
+ 
+-      var div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++      var div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       assert.strictEqual( div.css( "width", "50px" ).css( "width" ), "50px", 
".css getter/setter" );
+ } );
+@@ -66,7 +66,7 @@
+ QUnit.test( "show/hide", function( assert ) {
+       assert.expect( 2 );
+ 
+-      var div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++      var div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       div.hide();
+       assert.strictEqual( div.css( "display" ), "none", "div hidden" );
+@@ -127,7 +127,7 @@
+ QUnit.test( "data", function( assert ) {
+       assert.expect( 4 );
+ 
+-      var elem = jQuery( "<div data-c='d'/>" ).appendTo( "#qunit-fixture" );
++      var elem = jQuery( "<div data-c='d'></div>" ).appendTo( 
"#qunit-fixture" );
+ 
+       assert.ok( !jQuery.hasData( elem[ 0 ] ), "jQuery.hasData - false" );
+       assert.strictEqual( elem.data( "a", "b" ).data( "a" ), "b", ".data 
getter/setter" );
+@@ -139,7 +139,7 @@
+       assert.expect( 3 );
+ 
+       var elem = jQuery(
+-              "<div style='margin: 10px; padding: 7px; border: 2px solid 
black;' /> "
++              "<div style='margin: 10px; padding: 7px; border: 2px solid 
black;'></div> "
+       ).appendTo( "#qunit-fixture" );
+ 
+       assert.strictEqual( elem.width( 50 ).width(), 50, ".width 
getter/setter" );
+@@ -150,7 +150,7 @@
+ QUnit.test( "event", function( assert ) {
+       assert.expect( 1 );
+ 
+-      var elem = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++      var elem = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       elem
+               .on( "click", function() {
+@@ -169,12 +169,12 @@
+ 
+       var child,
+               elem1 = jQuery( "<div><span></span></div>" ).appendTo( 
"#qunit-fixture" ),
+-              elem2 = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++              elem2 = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       assert.strictEqual( elem1.text( "foo" ).text(), "foo", ".html 
getter/setter" );
+ 
+       assert.strictEqual(
+-              elem1.html( "<span/>" ).html(),
++              elem1.html( "<span></span>" ).html(),
+               "<span></span>",
+               ".html getter/setter"
+       );
+@@ -183,8 +183,8 @@
+       assert.strictEqual( elem1.prepend( elem2 )[ 0 ].childNodes[ 0 ], elem2[ 
0 ], ".prepend" );
+ 
+       child = elem1.find( "span" );
+-      child.after( "<a/>" );
+-      child.before( "<b/>" );
++      child.after( "<a></a>" );
++      child.before( "<b></b>" );
+ 
+       assert.strictEqual(
+               elem1.html(),
+@@ -196,8 +196,8 @@
+ QUnit.test( "offset", function( assert ) {
+       assert.expect( 3 );
+ 
+-      var parent = jQuery( "<div style='position:fixed;top:20px;'/>" 
).appendTo( "#qunit-fixture" ),
+-              elem = jQuery( "<div style='position:absolute;top:5px;'/>" 
).appendTo( parent );
++      var parent = jQuery( "<div style='position:fixed;top:20px;'></div>" 
).appendTo( "#qunit-fixture" ),
++              elem = jQuery( "<div style='position:absolute;top:5px;'></div>" 
).appendTo( parent );
+ 
+       assert.strictEqual( elem.offset().top, 25, ".offset getter" );
+       assert.strictEqual( elem.position().top, 5, ".position getter" );
+--- a/test/unit/core.js
++++ b/test/unit/core.js
+@@ -23,9 +23,9 @@
+ 
+       var elem, i,
+               obj = jQuery( "div" ),
+-              code = jQuery( "<code/>" ),
++              code = jQuery( "<code></code>" ),
+               img = jQuery( "<img/>" ),
+-              div = jQuery( "<div/><hr/><code/><b/>" ),
++              div = jQuery( "<div></div><hr/><code></code><b/>" ),
+               exec = false,
+               expected = 23,
+               attrObj = {
+@@ -113,7 +113,7 @@
+       elem = jQuery( "\n\n<em>world</em>" )[ 0 ];
+       assert.equal( elem.nodeName.toLowerCase(), "em", "leading newlines" );
+ 
+-      elem = jQuery( "<div/>", attrObj );
++      elem = jQuery( "<div></div>", attrObj );
+ 
+       if ( jQuery.fn.width ) {
+               assert.equal( elem[ 0 ].style.width, "10px", "jQuery() quick 
setter width" );
+@@ -428,7 +428,7 @@
+ 
+       assert.ok( jQuery( "<link rel='stylesheet'/>" )[ 0 ], "Creating a link" 
);
+ 
+-      assert.ok( !jQuery( "<script/>" )[ 0 ].parentNode, "Create a script" );
++      assert.ok( !jQuery( "<script></script>" )[ 0 ].parentNode, "Create a 
script" );
+ 
+       assert.ok( jQuery( "<input/>" ).attr( "type", "hidden" ), "Create an 
input and set the type." );
+ 
+@@ -496,8 +496,8 @@
+ QUnit.test( "jQuery('html', context)", function( assert ) {
+       assert.expect( 1 );
+ 
+-      var $div = jQuery( "<div/>" )[ 0 ],
+-              $span = jQuery( "<span/>", $div );
++      var $div = jQuery( "<div></div>" )[ 0 ],
++              $span = jQuery( "<span></span>", $div );
+       assert.equal( $span.length, 1, "verify a span created with a div 
context works, #1763" );
+ } );
+ 
+@@ -1296,7 +1296,7 @@
+       assert.equal( jQuery.parseHTML( "text" )[ 0 ].nodeType, 3, "Parsing 
text returns a text node" );
+       assert.equal( jQuery.parseHTML( "\t<div></div>" )[ 0 ].nodeValue, "\t", 
"Preserve leading whitespace" );
+ 
+-      assert.equal( jQuery.parseHTML( " <div/> " )[ 0 ].nodeType, 3, "Leading 
spaces are treated as text nodes (#11290)" );
++      assert.equal( jQuery.parseHTML( " <div></div> " )[ 0 ].nodeType, 3, 
"Leading spaces are treated as text nodes (#11290)" );
+ 
+       html = jQuery.parseHTML( "<div>test div</div>" );
+ 
+--- a/test/unit/css.js
++++ b/test/unit/css.js
+@@ -13,7 +13,7 @@
+       assert.notEqual( $child.css( "width" ), "20px", "Retrieving a width 
percentage on the child of a hidden div returns percentage" );
+       assert.notEqual( $child.css( "height" ), "20px", "Retrieving a height 
percentage on the child of a hidden div returns percentage" );
+ 
+-      div = jQuery( "<div/>" );
++      div = jQuery( "<div></div>" );
+ 
+       // These should be "auto" (or some better value)
+       // temporarily provide "0px" for backwards compat
+@@ -25,7 +25,7 @@
+       assert.equal( div.css( "width" ), "4px", "Width on disconnected node." 
);
+       assert.equal( div.css( "height" ), "4px", "Height on disconnected 
node." );
+ 
+-      div2 = jQuery( "<div style='display:none;'><input type='text' 
style='height:20px;'/><textarea style='height:20px;'/><div 
style='height:20px;'></div></div>" ).appendTo( "body" );
++      div2 = jQuery( "<div style='display:none;'><input type='text' 
style='height:20px;'/><textarea style='height:20px;'></textarea><div 
style='height:20px;'></div></div>" ).appendTo( "body" );
+ 
+       assert.equal( div2.find( "input" ).css( "height" ), "20px", "Height on 
hidden input." );
+       assert.equal( div2.find( "textarea" ).css( "height" ), "20px", "Height 
on hidden textarea." );
+@@ -42,7 +42,7 @@
+       assert.equal( parseFloat( jQuery( "#nothiddendiv" ).css( "width" ) ), 
0, "Test negative width set to 0" );
+       assert.equal( parseFloat( jQuery( "#nothiddendiv" ).css( "height" ) ), 
0, "Test negative height set to 0" );
+ 
+-      assert.equal( jQuery( "<div style='display: none;'/>" ).css( "display" 
), "none", "Styles on disconnected nodes" );
++      assert.equal( jQuery( "<div style='display: none;'></div>" ).css( 
"display" ), "none", "Styles on disconnected nodes" );
+ 
+       jQuery( "#floatTest" ).css( { "float": "right" } );
+       assert.equal( jQuery( "#floatTest" ).css( "float" ), "right", "Modified 
CSS float using \"float\": Assert float is right" );
+@@ -111,7 +111,7 @@
+ 
+       assert.strictEqual( child.css( "x-fake" ), undefined, "Make sure 
undefined is returned from css(nonexistent)." );
+ 
+-      div = jQuery( "<div/>" ).css( { position: "absolute", "z-index": 1000 } 
).appendTo( "#qunit-fixture" );
++      div = jQuery( "<div></div>" ).css( { position: "absolute", "z-index": 
1000 } ).appendTo( "#qunit-fixture" );
+       assert.strictEqual( div.css( "z-index" ), "1000",
+               "Make sure that a string z-index is returned from 
css('z-index') (#14432)." );
+ } );
+@@ -275,10 +275,10 @@
+       assert.expect( 1 );
+ 
+       var right,
+-              $container = jQuery( "<div/>" )
++              $container = jQuery( "<div></div>" )
+                       .css( { position: "absolute", width: "400px", fontSize: 
"4px" } )
+                       .appendTo( "#qunit-fixture" ),
+-              $el = jQuery( "<div/>" )
++              $el = jQuery( "<div></div>" )
+                       .css( { position: "absolute", left: "50%", right: "50%" 
} )
+                       .appendTo( $container );
+ 
+@@ -574,7 +574,7 @@
+       assert.equal( div.css( "display" ), "none",
+               "A shown-while-detached div inside a visible div can be hidden 
by the CSS cascade" );
+ 
+-      span = jQuery( "<span class='hidden'/>" );
++      span = jQuery( "<span class='hidden'></span>" );
+       span.show().appendTo( "#qunit-fixture" );
+       assert.equal( span.css( "display" ), "none",
+               "A shown-while-detached span can be hidden by the CSS cascade" 
);
+@@ -588,7 +588,7 @@
+               "A shown-while-detached cascade-hidden div is hidden after 
attachment" );
+       div.remove();
+ 
+-      span = jQuery( "<span class='hidden'/>" );
++      span = jQuery( "<span class='hidden'></span>" );
+       span.appendTo( "#qunit-fixture" ).detach().show().appendTo( 
"#qunit-fixture" );
+       assert.equal( span.css( "display" ), "none",
+               "A shown-while-detached cascade-hidden span is hidden after 
attachment" );
+@@ -615,7 +615,7 @@
+               "A shown-while-detached inline-hidden div inside a visible div 
has default display " +
+               "after attachment" );
+ 
+-      span = jQuery( "<span style='display: none'/>" );
++      span = jQuery( "<span style='display: none'></span>" );
+       span.show();
+       assert.equal( span[ 0 ].style.display, "",
+               "show() updates inline style of a detached inline-hidden span" 
);
+@@ -623,20 +623,20 @@
+       assert.equal( span.css( "display" ), "inline",
+               "A shown-while-detached inline-hidden span has default display 
after attachment" );
+ 
+-      div = jQuery( "<div style='display: inline'/>" );
++      div = jQuery( "<div style='display: inline'></div>" );
+       div.show().appendTo( "#qunit-fixture" );
+       assert.equal( div.css( "display" ), "inline",
+               "show() does not update inline style of a detached 
inline-visible div" );
+       div.remove();
+ 
+-      tr = jQuery( "<tr/>" );
++      tr = jQuery( "<tr></tr>" );
+       jQuery( "#table" ).append( tr );
+       tr.detach().hide().show();
+ 
+       assert.ok( !tr[ 0 ].style.display, "Not-hidden detached tr elements 
have no inline style" );
+       tr.remove();
+ 
+-      span = jQuery( "<span/>" ).hide().show();
++      span = jQuery( "<span></span>" ).hide().show();
+       assert.ok( !span[ 0 ].style.display, "Not-hidden detached span elements 
have no inline style" );
+       span.remove();
+ } );
+@@ -657,7 +657,7 @@
+ QUnit.test( "show() after hide() should always set display to initial value 
(#14750)", function( assert ) {
+       assert.expect( 1 );
+ 
+-      var div = jQuery( "<div />" ),
++      var div = jQuery( "<div></div>" ),
+               fixture = jQuery( "#qunit-fixture" );
+ 
+       fixture.append( div );
+@@ -671,11 +671,11 @@
+       assert.expect( 36 );
+ 
+       var i,
+-              $elems = jQuery( "<div/>" )
++              $elems = jQuery( "<div></div>" )
+                       .appendTo( "#qunit-fixture" )
+-                      .html( "<div data-expected-display='block'/>" +
+-                              "<span data-expected-display='inline'/>" +
+-                              "<ul><li 
data-expected-display='list-item'/></ul>" )
++                      .html( "<div data-expected-display='block'></div>" +
++                              "<span data-expected-display='inline'></span>" +
++                              "<ul><li 
data-expected-display='list-item'></li></ul>" )
+                       .find( "[data-expected-display]" );
+ 
+       $elems.each( function() {
+@@ -729,9 +729,9 @@
+       assert.expect( 36 );
+ 
+       var i,
+-              $elems = jQuery( "<div/>" )
++              $elems = jQuery( "<div></div>" )
+                       .appendTo( "#qunit-fixture" )
+-                      .html( "<span class='block'/><div class='inline'/><div 
class='list-item'/>" )
++                      .html( "<span class='block'></span><div 
class='inline'></div><div class='list-item'></div>" )
+                       .children();
+ 
+       $elems.each( function() {
+@@ -768,17 +768,17 @@
+       assert.expect( 96 );
+ 
+       var i,
+-              $elems = jQuery( "<div/>" )
++              $elems = jQuery( "<div></div>" )
+                       .appendTo( "#qunit-fixture" )
+-                      .html( "<span data-expected-display='block' 
style='display:block'/>" +
+-                              "<span class='list-item' 
data-expected-display='block' style='display:block'/>" +
+-                              "<div data-expected-display='inline' 
style='display:inline'/>" +
+-                              "<div class='list-item' 
data-expected-display='inline' style='display:inline'/>" +
++                      .html( "<span data-expected-display='block' 
style='display:block'></span>" +
++                              "<span class='list-item' 
data-expected-display='block' style='display:block'></span>" +
++                              "<div data-expected-display='inline' 
style='display:inline'></div>" +
++                              "<div class='list-item' 
data-expected-display='inline' style='display:inline'></div>" +
+                               "<ul>" +
+-                                      "<li data-expected-display='block' 
style='display:block'/>" +
+-                                      "<li class='inline' 
data-expected-display='block' style='display:block'/>" +
+-                                      "<li data-expected-display='inline' 
style='display:inline'/>" +
+-                                      "<li class='block' 
data-expected-display='inline' style='display:inline'/>" +
++                                      "<li data-expected-display='block' 
style='display:block'></li>" +
++                                      "<li class='inline' 
data-expected-display='block' style='display:block'></li>" +
++                                      "<li data-expected-display='inline' 
style='display:inline'></li>" +
++                                      "<li class='block' 
data-expected-display='inline' style='display:inline'></li>" +
+                               "</ul>" )
+                       .find( "[data-expected-display]" );
+ 
+@@ -817,15 +817,15 @@
+       assert.expect( 72 );
+ 
+       var i,
+-              $elems = jQuery( "<div/>" )
++              $elems = jQuery( "<div></div>" )
+                       .appendTo( "#qunit-fixture" )
+-                      .html( "<div class='hidden' 
data-expected-display='block'/>" +
+-                              "<div class='hidden' 
data-expected-display='block' style='display:none'/>" +
+-                              "<span class='hidden' 
data-expected-display='inline'/>" +
+-                              "<span class='hidden' 
data-expected-display='inline' style='display:none'/>" +
++                      .html( "<div class='hidden' 
data-expected-display='block'></div>" +
++                              "<div class='hidden' 
data-expected-display='block' style='display:none'></div>" +
++                              "<span class='hidden' 
data-expected-display='inline'></span>" +
++                              "<span class='hidden' 
data-expected-display='inline' style='display:none'></span>" +
+                               "<ul>" +
+-                                      "<li class='hidden' 
data-expected-display='list-item'/>" +
+-                                      "<li class='hidden' 
data-expected-display='list-item' style='display:none'/>" +
++                                      "<li class='hidden' 
data-expected-display='list-item'></li>" +
++                                      "<li class='hidden' 
data-expected-display='list-item' style='display:none'></li>" +
+                               "</ul>" )
+                       .find( "[data-expected-display]" );
+ 
+@@ -864,16 +864,16 @@
+       assert.expect( 84 );
+ 
+       var i,
+-              $elems = jQuery( "<div/>" )
++              $elems = jQuery( "<div></div>" )
+                       .appendTo( "#qunit-fixture" )
+-                      .html( "<span data-expected-display='inline' 
style='display:none'/>" +
+-                              "<span class='list-item' 
data-expected-display='list-item' style='display:none'/>" +
+-                              "<div data-expected-display='block' 
style='display:none'/>" +
+-                              "<div class='list-item' 
data-expected-display='list-item' style='display:none'/>" +
++                      .html( "<span data-expected-display='inline' 
style='display:none'></span>" +
++                              "<span class='list-item' 
data-expected-display='list-item' style='display:none'></span>" +
++                              "<div data-expected-display='block' 
style='display:none'></div>" +
++                              "<div class='list-item' 
data-expected-display='list-item' style='display:none'></div>" +
+                               "<ul>" +
+-                                      "<li data-expected-display='list-item' 
style='display:none'/>" +
+-                                      "<li class='block' 
data-expected-display='block' style='display:none'/>" +
+-                                      "<li class='inline' 
data-expected-display='inline' style='display:none'/>" +
++                                      "<li data-expected-display='list-item' 
style='display:none'></li>" +
++                                      "<li class='block' 
data-expected-display='block' style='display:none'></li>" +
++                                      "<li class='inline' 
data-expected-display='inline' style='display:none'></li>" +
+                               "</ul>" )
+                       .find( "[data-expected-display]" );
+ 
+@@ -944,9 +944,9 @@
+ 
+ QUnit[ jQuery.find.compile && jQuery.fn.toggle ? "test" : "skip" ]( "detached 
toggle()", function( assert ) {
+       assert.expect( 6 );
+-      var detached = jQuery( "<p><a/><p>" ).find( "*" ).addBack(),
+-              hiddenDetached = jQuery( "<p><a/></p>" ).find( "*" 
).addBack().css( "display", "none" ),
+-              cascadeHiddenDetached = jQuery( "<p><a/></p>" ).find( "*" 
).addBack().addClass( "hidden" );
++      var detached = jQuery( "<p><a></a><p>" ).find( "*" ).addBack(),
++              hiddenDetached = jQuery( "<p><a></a></p>" ).find( "*" 
).addBack().css( "display", "none" ),
++              cascadeHiddenDetached = jQuery( "<p><a></a></p>" ).find( "*" 
).addBack().addClass( "hidden" );
+ 
+       detached.toggle();
+       detached.appendTo( "#qunit-fixture" );
+@@ -1020,9 +1020,9 @@
+ QUnit.test( "box model properties incorrectly returning % instead of px, see 
#10639 and #12088", function( assert ) {
+       assert.expect( 2 );
+ 
+-      var container = jQuery( "<div/>" ).width( 400 ).appendTo( 
"#qunit-fixture" ),
+-              el = jQuery( "<div/>" ).css( { "width": "50%", "marginRight": 
"50%" } ).appendTo( container ),
+-              el2 = jQuery( "<div/>" ).css( { "width": "50%", "minWidth": 
"300px", "marginLeft": "25%" } ).appendTo( container );
++      var container = jQuery( "<div></div>" ).width( 400 ).appendTo( 
"#qunit-fixture" ),
++              el = jQuery( "<div></div>" ).css( { "width": "50%", 
"marginRight": "50%" } ).appendTo( container ),
++              el2 = jQuery( "<div></div>" ).css( { "width": "50%", 
"minWidth": "300px", "marginLeft": "25%" } ).appendTo( container );
+ 
+       assert.equal( el.css( "marginRight" ), "200px", "css('marginRight') 
returning % instead of px, see #10639" );
+       assert.equal( el2.css( "marginLeft" ), "100px", "css('marginLeft') 
returning incorrect pixel value, see #12088" );
+@@ -1066,10 +1066,10 @@
+       assert.expect( 2 );
+       var span, div;
+ 
+-      span = jQuery( "<span/>" ).css( "background-image", "url(" + baseURL + 
"1x1.jpg)" );
++      span = jQuery( "<span></span>" ).css( "background-image", "url(" + 
baseURL + "1x1.jpg)" );
+       assert.notEqual( span.css( "background-image" ), null, "can't get 
background-image in IE<9, see #10254" );
+ 
+-      div = jQuery( "<div/>" ).css( "top", 10 );
++      div = jQuery( "<div></div>" ).css( "top", 10 );
+       assert.equal( div.css( "top" ), "10px", "can't get top in IE<9, see 
#8388" );
+ } );
+ 
+@@ -1084,7 +1084,7 @@
+ } );
+ 
+ QUnit.test( "can't get background-position in IE<9, see #10796", function( 
assert ) {
+-      var div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ),
++      var div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ),
+               units = [
+                       "0 0",
+                       "12px 12px",
+@@ -1468,7 +1468,7 @@
+               QUnit.test( "Don't append px to CSS \"order\" value (#14049)", 
function( assert ) {
+                       assert.expect( 1 );
+ 
+-                      var $elem = jQuery( "<div/>" );
++                      var $elem = jQuery( "<div></div>" );
+ 
+                       $elem.css( "order", 2 );
+                       assert.equal( $elem.css( "order" ), "2", "2 on order" );
+@@ -1547,7 +1547,7 @@
+               resetCssPropsFor( "appearance" );
+               resetCssPropsFor( "transform" );
+ 
+-              elem = jQuery( "<div/>" )
++              elem = jQuery( "<div></div>" )
+                       .css( {
+                               msAppearance: "none",
+                               appearance: "none",
+@@ -1571,7 +1571,7 @@
+       QUnit.test( "Don't detect fake set properties on a node when caching 
the prefixed version", function( assert ) {
+               assert.expect( 1 );
+ 
+-              var elem = jQuery( "<div/>" ),
++              var elem = jQuery( "<div></div>" ),
+                       style = elem[ 0 ].style;
+               style.MozFakeProperty = "old value";
+               elem.css( "fakeProperty", "new value" );
+--- a/test/unit/data.js
++++ b/test/unit/data.js
+@@ -427,7 +427,7 @@
+       assert.expect( 4 );
+ 
+       var obj, jqobj,
+-              div = jQuery( "<div/>" );
++              div = jQuery( "<div></div>" );
+ 
+       div.data( { "test": "in", "test2": "in2" } );
+       assert.equal( div.data( "test" ), "in", "Verify setting an object in 
data" );
+@@ -556,7 +556,7 @@
+ 
+       assert.expect( 2 );
+ 
+-      var div = jQuery( "<div/>", { id: "hyphened" } ).appendTo( 
"#qunit-fixture" ),
++      var div = jQuery( "<div></div>", { id: "hyphened" } ).appendTo( 
"#qunit-fixture" ),
+               test = {
+                       "camelBar": "camelBar",
+                       "hyphen-foo": "hyphen-foo"
+@@ -573,7 +573,7 @@
+ 
+       assert.expect( 1 );
+ 
+-      var div = jQuery( "<div/>" );
++      var div = jQuery( "<div></div>" );
+ 
+       div.data( "foo-bar", "baz" );
+ 
+@@ -585,14 +585,14 @@
+ 
+       var a, b;
+ 
+-      a = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++      a = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       a.attr( "data-long-param", "test" );
+       a.data( "long-param", { a: 2 } );
+ 
+       assert.deepEqual( a.data( "long-param" ), { a: 2 }, "data with property 
long-param was found, 1" );
+ 
+-      b = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++      b = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       b.attr( "data-long-param", "test" );
+       b.data( "long-param" );
+@@ -668,7 +668,7 @@
+ 
+ QUnit.test( ".data supports interoperable hyphenated/camelCase get/set of 
properties with arbitrary non-null|NaN|undefined values", function( assert ) {
+ 
+-      var div = jQuery( "<div/>", { id: "hyphened" } ).appendTo( 
"#qunit-fixture" ),
++      var div = jQuery( "<div></div>", { id: "hyphened" } ).appendTo( 
"#qunit-fixture" ),
+               datas = {
+                       "non-empty": {
+                               key: "nonEmpty",
+@@ -736,7 +736,7 @@
+ } );
+ 
+ QUnit.test( ".data supports interoperable removal of hyphenated/camelCase 
properties", function( assert ) {
+-      var div = jQuery( "<div/>", { id: "hyphened" } ).appendTo( 
"#qunit-fixture" ),
++      var div = jQuery( "<div></div>", { id: "hyphened" } ).appendTo( 
"#qunit-fixture" ),
+               datas = {
+                       "non-empty": "a string",
+                       "empty-string": "",
+@@ -934,7 +934,7 @@
+       assert.expect( 2 );
+ 
+       var key,
+-              div = jQuery( "<div/>" );
++              div = jQuery( "<div></div>" );
+       div.data( "some", "data" );
+       assert.equal( div.data( "some" ), "data", "Data is added" );
+       div.removeData( "some" );
+@@ -968,7 +968,7 @@
+       assert.expect( 1 );
+ 
+       var key,
+-              div = jQuery( "<div/>" );
++              div = jQuery( "<div></div>" );
+ 
+       div.data( "foo" );
+       assert.equal( jQuery.hasData( div[ 0 ] ), false, "No data exists after 
access" );
+--- a/test/unit/deprecated.js
++++ b/test/unit/deprecated.js
+@@ -102,7 +102,7 @@
+ QUnit[ jQuery.fn.click ? "test" : "skip" ]( "Event aliases", function( assert 
) {
+ 
+       // Explicitly skipping focus/blur events due to their flakiness
+-      var     $elem = jQuery( "<div />" ).appendTo( "#qunit-fixture" ),
++      var     $elem = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ),
+               aliases = ( "resize scroll click dblclick mousedown mouseup " +
+                       "mousemove mouseover mouseout mouseenter mouseleave 
change " +
+                       "select submit keydown keypress keyup contextmenu" 
).split( " " );
+--- a/test/unit/dimensions.js
++++ b/test/unit/dimensions.js
+@@ -342,7 +342,7 @@
+ QUnit.test( "table dimensions", function( assert ) {
+       assert.expect( 2 );
+ 
+-      var table = jQuery( 
"<table><colgroup><col/><col/></colgroup><tbody><tr><td></td><td>a</td></tr><tr><td></td><td>a</td></tr></tbody></table>"
 ).appendTo( "#qunit-fixture" ),
++      var table = jQuery( 
"<table><colgroup><col></col><col></col></colgroup><tbody><tr><td></td><td>a</td></tr><tr><td></td><td>a</td></tr></tbody></table>"
 ).appendTo( "#qunit-fixture" ),
+               tdElem = table.find( "td" ).first(),
+               colElem = table.find( "col" ).first().width( 300 );
+ 
+@@ -476,7 +476,7 @@
+       assert.expect( 1 );
+ 
+       var offsetTop,
+-              element = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++              element = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       element.offset( function( index, coords ) {
+               coords.top = 100;
+@@ -523,7 +523,7 @@
+ 
+       assert.expect( 2 );
+ 
+-      var $elem = jQuery( "<div style='width: 200px; height: 200px; 
transform: scale(2);' />" )
++      var $elem = jQuery( "<div style='width: 200px; height: 200px; 
transform: scale(2);'></div>" )
+               .appendTo( "#qunit-fixture" );
+ 
+       assert.equal( $elem.width(), 200, "Width ignores transforms" );
+@@ -596,14 +596,14 @@
+                               return old + adjustment;
+                       };
+               },
+-              parent = jQuery( "<div/>" )
++              parent = jQuery( "<div></div>" )
+                       .css( { position: "absolute", width: "1000px", height: 
"1000px" } )
+                       .appendTo( "#qunit-fixture" ),
+               fraction = jQuery( "<div style='width:4.5px;'/>" ).appendTo( 
parent ).width() % 1,
+               borderWidth = 1,
+               padding = 2,
+               size = 100 + fraction,
+-              plainBox = jQuery( "<div />" )
++              plainBox = jQuery( "<div></div>" )
+                       .css( {
+                               "box-sizing": "content-box",
+                               position: "absolute",
+--- a/test/unit/effects.js
++++ b/test/unit/effects.js
+@@ -570,7 +570,7 @@
+       } );
+       this.clock.tick( 200 );
+ 
+-      $elem = jQuery( "<div />" );
++      $elem = jQuery( "<div></div>" );
+       $elem.show( 0, function() {
+               assert.ok( true, "Show callback with no duration" );
+       } );
+@@ -1256,7 +1256,7 @@
+ QUnit.test( "hide hidden elements, with animation (bug #7141)", function( 
assert ) {
+       assert.expect( 4 );
+ 
+-      var div = jQuery( "<div id='bug7141' style='display:none'/>" 
).appendTo( "#qunit-fixture" );
++      var div = jQuery( "<div id='bug7141' style='display:none'></div>" 
).appendTo( "#qunit-fixture" );
+       assert.equal( div.css( "display" ), "none", "Element is initially 
hidden" );
+       div.hide( 10, function() {
+               assert.equal( div.css( "display" ), "none", "Element is hidden 
in .hide() callback" );
+@@ -1557,10 +1557,10 @@
+                       toggle: [ 1 ],
+                       slideToggle: []
+               },
+-              $divEmpty = jQuery( "<div/>" ),
++              $divEmpty = jQuery( "<div></div>" ),
+               $divTest = jQuery( "<div>test</div>" ),
+-              $divNone = jQuery( "<div style='display: none;'/>" ),
+-              $divInline = jQuery( "<div style='display: inline;'/>" ),
++              $divNone = jQuery( "<div style='display: none;'></div>" ),
++              $divInline = jQuery( "<div style='display: inline;'></div>" ),
+               nullParentDisplay = $divEmpty.css( "display" ),
+               underFragmentDisplay = $divTest.css( "display" ),
+               clock = this.clock;
+@@ -1580,7 +1580,7 @@
+       assert.expectJqData( env, $divNone[ 0 ], "olddisplay" );
+ 
+       jQuery.each( showMethods, function( name, opt ) {
+-              jQuery.fn[ name ].apply( jQuery( "<div/>" ), opt.concat( [ 
function() {
++              jQuery.fn[ name ].apply( jQuery( "<div></div>" ), opt.concat( [ 
function() {
+                       assert.strictEqual( jQuery( this ).css( "display" ), 
nullParentDisplay,
+                               "." + name + " block with null parentNode" );
+               } ] ) );
+@@ -1591,7 +1591,7 @@
+               } ] ) );
+       } );
+       jQuery.each( toggleMethods, function( name, opt ) {
+-              jQuery.fn[ name ].apply( jQuery( "<div/>" ), opt.concat( [ 
function() {
++              jQuery.fn[ name ].apply( jQuery( "<div></div>" ), opt.concat( [ 
function() {
+                       assert.strictEqual( jQuery( this ).css( "display" ), 
"none",
+                               "." + name + " block with null parentNode" );
+               } ] ) );
+@@ -2315,8 +2315,8 @@
+       assert.expect( 2 );
+ 
+       var clock = this.clock,
+-              fromStyleSheet = jQuery( "<span id='span-14824' />" ),
+-              fromStyleAttr = jQuery( "<span style='display: block;' />" );
++              fromStyleSheet = jQuery( "<span id='span-14824'></span>" ),
++              fromStyleAttr = jQuery( "<span style='display: block;'></span>" 
);
+ 
+       jQuery( "#qunit-fixture" ).append( fromStyleSheet, fromStyleAttr );
+ 
+@@ -2416,7 +2416,7 @@
+ QUnit.test( "Display value is correct for disconnected nodes (trac-13310)", 
function( assert ) {
+       assert.expect( 3 );
+ 
+-      var div = jQuery( "<div/>" );
++      var div = jQuery( "<div></div>" );
+ 
+       assert.equal( div.css( "display", "inline" ).hide().show().appendTo( 
"body" ).css( "display" ), "inline", "Initialized display value has returned" );
+       div.remove();
+@@ -2437,7 +2437,7 @@
+ 
+       var clock = this.clock;
+ 
+-      jQuery( "<span/><div style='display:inline' title='inline div'/>" 
).each( function() {
++      jQuery( "<span></span><div style='display:inline' title='inline 
div'></div>" ).each( function() {
+               var completed, interrupted,
+                       N = 100,
+                       fixture = jQuery( "#qunit-fixture" ),
+--- a/test/unit/event.js
++++ b/test/unit/event.js
+@@ -153,7 +153,7 @@
+       var cur, div,
+               obj = {};
+ 
+-      div = jQuery( "<div/>" ).on( "focusin.a", function( e ) {
++      div = jQuery( "<div></div>" ).on( "focusin.a", function( e ) {
+               assert.equal( e.type, cur, "Verify right single event was 
fired." );
+       } );
+ 
+@@ -163,7 +163,7 @@
+       // manually clean up detached elements
+       div.remove();
+ 
+-      div = jQuery( "<div/>" ).on( "click mouseover", obj, function( e ) {
++      div = jQuery( "<div></div>" ).on( "click mouseover", obj, function( e ) 
{
+               assert.equal( e.type, cur, "Verify right multi event was 
fired." );
+               assert.equal( e.data, obj, "Make sure the data came in 
correctly." );
+       } );
+@@ -177,7 +177,7 @@
+       // manually clean up detached elements
+       div.remove();
+ 
+-      div = jQuery( "<div/>" ).on( "focusin.a focusout.b", function( e ) {
++      div = jQuery( "<div></div>" ).on( "focusin.a focusout.b", function( e ) 
{
+               assert.equal( e.type, cur, "Verify right multi event was 
fired." );
+       } );
+ 
+@@ -195,7 +195,7 @@
+       assert.expect( 27 );
+ 
+       var i = 0,
+-              div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).on( 
"test", function() {
++              div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).on( 
"test", function() {
+                       assert.ok( true, "Test event fired." );
+               } );
+ 
+@@ -244,7 +244,7 @@
+       // Should trigger 4
+       div.off( "test" );
+ 
+-      div = jQuery( "<div/>" ).on( "test", function() {
++      div = jQuery( "<div></div>" ).on( "test", function() {
+               assert.ok( true, "Test event fired." );
+       } );
+ 
+@@ -876,7 +876,7 @@
+       assert.expect( 1 );
+ 
+       var count = 0,
+-              elem = jQuery( "<a />" );
++              elem = jQuery( "<a></a>" );
+       elem.on( "mouseenter", function() {
+               count++;
+       } );
+@@ -890,7 +890,7 @@
+       assert.expect( 1 );
+ 
+       var count = 0,
+-              elem = jQuery( "<a />" );
++              elem = jQuery( "<a></a>" );
+       elem.on( "pointerenter", function() {
+               count++;
+       } );
+@@ -1075,7 +1075,7 @@
+       var $formByClone, $formByHTML,
+               $testForm = jQuery( "#testForm" ),
+               $fixture = jQuery( "#qunit-fixture" ),
+-              $wrapperDiv = jQuery( "<div/>" ).appendTo( $fixture );
++              $wrapperDiv = jQuery( "<div></div>" ).appendTo( $fixture );
+ 
+       function noSubmit( e ) {
+               e.preventDefault();
+@@ -1111,7 +1111,7 @@
+       var $formByClone, $formByHTML,
+               $form = jQuery( "#form" ),
+               $fixture = jQuery( "#qunit-fixture" ),
+-              $wrapperDiv = jQuery( "<div/>" ).appendTo( $fixture );
++              $wrapperDiv = jQuery( "<div></div>" ).appendTo( $fixture );
+ 
+       function delegatedChange() {
+               assert.ok( true, "Make sure change event bubbles up." );
+@@ -1141,7 +1141,7 @@
+       assert.expect( 28 );
+ 
+       var event,
+-              $parent = jQuery( "<div id='par' />" ).appendTo( "body" ),
++              $parent = jQuery( "<div id='par'></div>" ).appendTo( "body" ),
+               $child = jQuery( "<p id='child'>foo</p>" ).appendTo( $parent );
+ 
+       $parent.get( 0 ).style.display = "none";
+@@ -2723,7 +2723,7 @@
+       assert.expect( 2 );
+ 
+       var key,
+-              div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++              div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       div.on( "click", false );
+       div.on( "custom", function() {
+--- a/test/unit/manipulation.js
++++ b/test/unit/manipulation.js
+@@ -88,9 +88,9 @@
+       assert.equal( $multipleElements.eq( 1 ).text(), expected, "text() 
updates multiple elements (#11809)" );
+ 
+       // Prevent memory leaks #11809
+-      $childDiv = jQuery( "<div/>" );
++      $childDiv = jQuery( "<div></div>" );
+       $childDiv.data( "leak", true );
+-      $parentDiv = jQuery( "<div/>" );
++      $parentDiv = jQuery( "<div></div>" );
+       $parentDiv.append( $childDiv );
+       $parentDiv.text( "Dry off" );
+ }
+@@ -241,10 +241,10 @@
+               assert.strictEqual( e.message || e, undefined, message );
+       }
+ 
+-      jQuery( "<fieldset/>" ).appendTo( "#form" ).append( valueObj( "<legend 
id='legend'>test</legend>" ) );
++      jQuery( "<fieldset></fieldset>" ).appendTo( "#form" ).append( valueObj( 
"<legend id='legend'>test</legend>" ) );
+       assert.t( "Append legend", "#legend", [ "legend" ] );
+ 
+-      $map = jQuery( "<map/>" ).append( valueObj( "<area id='map01' 
shape='rect' coords='50,50,150,150' href='http://www.jquery.com/' 
alt='jQuery'>" ) );
++      $map = jQuery( "<map></map>" ).append( valueObj( "<area id='map01' 
shape='rect' coords='50,50,150,150' href='http://www.jquery.com/' 
alt='jQuery'>" ) );
+ 
+       assert.equal( $map[ 0 ].childNodes.length, 1, "The area was inserted." 
);
+       assert.equal( $map[ 0 ].firstChild.nodeName.toLowerCase(), "area", "The 
area was inserted." );
+@@ -264,7 +264,7 @@
+               assert.ok( jQuery.parseHTML( "<" + name + "/>" ).length, name + 
" wrapped correctly" );
+       } );
+ 
+-      jQuery( "#table colgroup" ).append( valueObj( "<col/>" ) );
++      jQuery( "#table colgroup" ).append( valueObj( "<col></col>" ) );
+       assert.equal( jQuery( "#table colgroup col" ).length, 1, "Append col" );
+ 
+       jQuery( "#form" )
+@@ -272,12 +272,12 @@
+               .append( valueObj( "<select 
id='appendSelect2'><option>Test</option></select>" ) );
+       assert.t( "Append Select", "#appendSelect1, #appendSelect2", [ 
"appendSelect1", "appendSelect2" ] );
+ 
+-      assert.equal( "Two nodes", jQuery( "<div />" ).append( "Two", " nodes" 
).text(), "Appending two text nodes (#4011)" );
+-      assert.equal( jQuery( "<div />" ).append( "1", "", 3 ).text(), "13", 
"If median is false-like value, subsequent arguments should not be ignored" );
++      assert.equal( "Two nodes", jQuery( "<div></div>" ).append( "Two", " 
nodes" ).text(), "Appending two text nodes (#4011)" );
++      assert.equal( jQuery( "<div></div>" ).append( "1", "", 3 ).text(), 
"13", "If median is false-like value, subsequent arguments should not be 
ignored" );
+ 
+       // using contents will get comments regular, text, and comment nodes
+       j = jQuery( "#nonnodes" ).contents();
+-      d = jQuery( "<div/>" ).appendTo( "#nonnodes" ).append( j );
++      d = jQuery( "<div></div>" ).appendTo( "#nonnodes" ).append( j );
+ 
+       assert.equal( jQuery( "#nonnodes" ).length, 1, "Check 
node,textnode,comment append moved leaving just the div" );
+       assert.equal( d.contents().length, 3, "Check node,textnode,comment 
append works" );
+@@ -294,12 +294,12 @@
+       $radioChecked.trigger( "click" );
+       $radioUnchecked[ 0 ].checked = false;
+ 
+-      jQuery( "<div/>" ).insertBefore( $radioParent ).append( $radioParent );
++      jQuery( "<div></div>" ).insertBefore( $radioParent ).append( 
$radioParent );
+ 
+       assert.equal( $radioChecked[ 0 ].checked, true, "Reappending radios 
uphold which radio is checked" );
+       assert.equal( $radioUnchecked[ 0 ].checked, false, "Reappending radios 
uphold not being checked" );
+ 
+-      assert.equal( jQuery( "<div/>" ).append( valueObj( "option<area/>" ) )[ 
0 ].childNodes.length, 2, "HTML-string with leading text should be processed 
correctly" );
++      assert.equal( jQuery( "<div></div>" ).append( valueObj( 
"option<area></area>" ) )[ 0 ].childNodes.length, 2, "HTML-string with leading 
text should be processed correctly" );
+ }
+ 
+ QUnit.test( "append(String|Element|Array<Element>|jQuery)", function( assert 
) {
+@@ -672,7 +672,7 @@
+       jQuery( "#select1" ).appendTo( "#foo" );
+       assert.t( "Append select", "#foo select", [ "select1" ] );
+ 
+-      div = jQuery( "<div/>" ).on( "click", function() {
++      div = jQuery( "<div></div>" ).on( "click", function() {
+               assert.ok( true, "Running a cloned click." );
+       } );
+       div.appendTo( "#qunit-fixture, #moretests" );
+@@ -680,7 +680,7 @@
+       jQuery( "#qunit-fixture div" ).last().trigger( "click" );
+       jQuery( "#moretests div" ).last().trigger( "click" );
+ 
+-      div = jQuery( "<div/>" ).appendTo( "#qunit-fixture, #moretests" );
++      div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture, #moretests" );
+ 
+       assert.equal( div.length, 2, "appendTo returns the inserted elements" );
+ 
+@@ -689,7 +689,7 @@
+       assert.ok( jQuery( "#qunit-fixture div" ).last().hasClass( "test" ), 
"appendTo element was modified after the insertion" );
+       assert.ok( jQuery( "#moretests div" ).last().hasClass( "test" ), 
"appendTo element was modified after the insertion" );
+ 
+-      div = jQuery( "<div/>" );
++      div = jQuery( "<div></div>" );
+       jQuery( "<span>a</span><b>b</b>" ).filter( "span" ).appendTo( div );
+ 
+       assert.equal( div.children().length, 1, "Make sure the right number of 
children were inserted." );
+@@ -989,7 +989,7 @@
+       assert.expect( 2 );
+ 
+       var set;
+-      set = jQuery( "<div/>" ).before( "<span>test</span>" );
++      set = jQuery( "<div></div>" ).before( "<span>test</span>" );
+       assert.equal( set[ 0 ].nodeName.toLowerCase(), "div", "Insert before a 
disconnected node should be a no-op" );
+       assert.equal( set.length, 1, "Insert the element before the 
disconnected node. should be a no-op" );
+ } );
+@@ -1008,8 +1008,8 @@
+ 
+       assert.expect( 2 );
+ 
+-      assert.equal( jQuery( "<input type='checkbox'/>" ).before( "<div/>" 
).length, 1, "before() on disconnected node is no-op" );
+-      assert.equal( jQuery( "<input type='checkbox'/>" ).after( "<div/>" 
).length, 1, "after() on disconnected node is no-op" );
++      assert.equal( jQuery( "<input type='checkbox'/>" ).before( 
"<div></div>" ).length, 1, "before() on disconnected node is no-op" );
++      assert.equal( jQuery( "<input type='checkbox'/>" ).after( "<div></div>" 
).length, 1, "after() on disconnected node is no-op" );
+ } );
+ 
+ QUnit.test( "insert with .before() on disconnected node last", function( 
assert ) {
+@@ -1018,7 +1018,7 @@
+ 
+       var expectedBefore = "This is a normal link: bugaYahoo";
+ 
+-      jQuery( "#yahoo" ).add( "<span/>" ).before( "<b>buga</b>" );
++      jQuery( "#yahoo" ).add( "<span></span>" ).before( "<b>buga</b>" );
+       assert.equal( jQuery( "#en" ).text(), expectedBefore, "Insert String 
before with disconnected node last" );
+ } );
+ 
+@@ -1028,7 +1028,7 @@
+ 
+       var expectedBefore = "This is a normal link: bugaYahoo";
+ 
+-      jQuery( "<span/>" ).add( "#yahoo" ).before( "<b>buga</b>" );
++      jQuery( "<span></span>" ).add( "#yahoo" ).before( "<b>buga</b>" );
+       assert.equal( jQuery( "#en" ).text(), expectedBefore, "Insert String 
before with disconnected node first" );
+ } );
+ 
+@@ -1038,7 +1038,7 @@
+ 
+       var expectedAfter = "This is a normal link: Yahoobuga";
+ 
+-      jQuery( "#yahoo" ).add( "<span/>" ).after( "<b>buga</b>" );
++      jQuery( "#yahoo" ).add( "<span></span>" ).after( "<b>buga</b>" );
+       assert.equal( jQuery( "#en" ).text(), expectedAfter, "Insert String 
after with disconnected node last" );
+ } );
+ 
+@@ -1048,7 +1048,7 @@
+ 
+       var expectedAfter = "This is a normal link: Yahoobuga";
+ 
+-      jQuery( "<span/>" ).add( "#yahoo" ).after( "<b>buga</b>" );
++      jQuery( "<span></span>" ).add( "#yahoo" ).after( "<b>buga</b>" );
+       assert.equal( jQuery( "#en" ).text(), expectedAfter, "Insert String 
after with disconnected node first" );
+ } );
+ 
+@@ -1168,7 +1168,7 @@
+ 
+       assert.expect( 2 );
+ 
+-      var set = jQuery( "<div/>" ).before( "<span>test</span>" );
++      var set = jQuery( "<div></div>" ).before( "<span>test</span>" );
+       assert.equal( set[ 0 ].nodeName.toLowerCase(), "div", "Insert after a 
disconnected node should be a no-op" );
+       assert.equal( set.length, 1, "Insert the element after the disconnected 
node should be a no-op" );
+ } );
+@@ -1250,10 +1250,10 @@
+       jQuery( "#anchor1" ).contents().replaceWith( val( tmp ) );
+       assert.deepEqual( jQuery( "#anchor1" ).contents().get(), [ tmp ], 
"Replace text node with element" );
+ 
+-      tmp = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).on( "click", 
function() {
++      tmp = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).on( "click", 
function() {
+               assert.ok( true, "Newly bound click run." );
+       } );
+-      y = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).on( "click", 
function() {
++      y = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).on( "click", 
function() {
+               assert.ok( false, "Previously bound click run." );
+       } );
+       child = y.append( "<b>test</b>" ).find( "b" ).on( "click", function() {
+@@ -1267,7 +1267,7 @@
+       y.trigger( "click" ); // Shouldn't be run
+       child.trigger( "click" ); // Shouldn't be run
+ 
+-      y = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).on( "click", 
function() {
++      y = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).on( "click", 
function() {
+               assert.ok( false, "Previously bound click run." );
+       } );
+       child2 = y.append( "<u>test</u>" ).find( "u" ).on( "click", function() {
+@@ -1279,13 +1279,13 @@
+ 
+       child2.trigger( "click" );
+ 
+-      set = jQuery( "<div/>" ).replaceWith( val( "<span>test</span>" ) );
++      set = jQuery( "<div></div>" ).replaceWith( val( "<span>test</span>" ) );
+       assert.equal( set[ 0 ].nodeName.toLowerCase(), "div", "No effect on a 
disconnected node." );
+       assert.equal( set.length, 1, "No effect on a disconnected node." );
+       assert.equal( set[ 0 ].childNodes.length, 0, "No effect on a 
disconnected node." );
+ 
+       child = jQuery( "#qunit-fixture" ).children().first();
+-      $div = jQuery( "<div class='pathological'/>" ).insertBefore( child );
++      $div = jQuery( "<div class='pathological'></div>" ).insertBefore( child 
);
+       $div.replaceWith( $div );
+       assert.deepEqual( jQuery( ".pathological", "#qunit-fixture" ).get(), 
$div.get(),
+               "Self-replacement" );
+@@ -1342,7 +1342,7 @@
+ 
+       assert.expect( 25 );
+ 
+-      var $el = jQuery( "<div/><div/>" ).html( "<p>0</p>" ),
++      var $el = jQuery( "<div></div><div></div>" ).html( "<p>0</p>" ),
+               expectedHTML = $el.html(),
+               tests = {
+                       "empty string": "",
+@@ -1355,13 +1355,13 @@
+               };
+ 
+       jQuery.each( tests, function( label, input ) {
+-              $el.html( "<a/>" ).children().replaceWith( input );
++              $el.html( "<a></a>" ).children().replaceWith( input );
+               assert.strictEqual( $el.html(), "", "replaceWith(" + label + 
")" );
+-              $el.html( "<b/>" ).children().replaceWith( function() { return 
input; } );
++              $el.html( "<b></b>" ).children().replaceWith( function() { 
return input; } );
+               assert.strictEqual( $el.html(), "", "replaceWith(function 
returning " + label + ")" );
+-              $el.html( "<i/>" ).children().replaceWith( function( i ) { 
return input; } );
++              $el.html( "<i></i>" ).children().replaceWith( function( i ) { 
return input; } );
+               assert.strictEqual( $el.html(), "", "replaceWith(other function 
returning " + label + ")" );
+-              $el.html( "<p/>" ).children().replaceWith( function( i ) {
++              $el.html( "<p></p>" ).children().replaceWith( function( i ) {
+                       return i ?
+                               input :
+                               jQuery( this ).html( i + "" );
+@@ -1482,7 +1482,7 @@
+       div.remove();
+ 
+       // Verify that cloned children can keep event listeners
+-      div = jQuery( "<div/>" ).append( [ document.createElement( "table" ), 
document.createElement( "table" ) ] );
++      div = jQuery( "<div></div>" ).append( [ document.createElement( "table" 
), document.createElement( "table" ) ] );
+       div.find( "table" ).on( "click", function() {
+               assert.ok( true, "Bound event still exists." );
+       } );
+@@ -1509,7 +1509,7 @@
+       div.remove();
+ 
+       // Test both html() and clone() for <embed> and <object> types
+-      div = jQuery( "<div/>" ).html( "<embed height='355' width='425' 
src='http://www.youtube.com/v/3KANI2dpXLw&amp;hl=en'></embed>" );
++      div = jQuery( "<div></div>" ).html( "<embed height='355' width='425' 
src='http://www.youtube.com/v/3KANI2dpXLw&amp;hl=en'></embed>" );
+ 
+       clone = div.clone( true );
+       assert.equal( clone.length, 1, "One element cloned" );
+@@ -1519,7 +1519,7 @@
+       // this is technically an invalid object, but because of the special
+       // classid instantiation it is the only kind that IE has trouble with,
+       // so let's test with it too.
+-      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&amp;hl=en'>  <param name='wmode' 
value='transparent'> </object>" );
++      div = jQuery( "<div></div>" ).html( "<object height='355' width='425' 
classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'>  <param name='movie' 
value='http://www.youtube.com/v/3KANI2dpXLw&amp;hl=en'>  <param name='wmode' 
value='transparent'> </object>" );
+ 
+       clone = div.clone( true );
+       assert.equal( clone.length, 1, "One element cloned" );
+@@ -1546,14 +1546,14 @@
+       } )();
+ 
+       // and here's a valid one.
+-      div = jQuery( "<div/>" ).html( "<object height='355' width='425' 
type='application/x-shockwave-flash' 
data='http://www.youtube.com/v/3KANI2dpXLw&amp;hl=en'>  <param name='movie' 
value='http://www.youtube.com/v/3KANI2dpXLw&amp;hl=en'>  <param name='wmode' 
value='transparent'> </object>" );
++      div = jQuery( "<div></div>" ).html( "<object height='355' width='425' 
type='application/x-shockwave-flash' 
data='http://www.youtube.com/v/3KANI2dpXLw&amp;hl=en'>  <param name='movie' 
value='http://www.youtube.com/v/3KANI2dpXLw&amp;hl=en'>  <param name='wmode' 
value='transparent'> </object>" );
+ 
+       clone = div.clone( true );
+       assert.equal( clone.length, 1, "One element cloned" );
+       assert.equal( clone.html(), div.html(), "Element contents cloned" );
+       assert.equal( clone[ 0 ].nodeName.toUpperCase(), "DIV", "DIV element 
cloned" );
+ 
+-      div = jQuery( "<div/>" ).data( { "a": true } );
++      div = jQuery( "<div></div>" ).data( { "a": true } );
+       clone = div.clone( true );
+       assert.equal( clone.data( "a" ), true, "Data cloned." );
+       clone.data( "a", false );
+@@ -1688,12 +1688,12 @@
+               div = jQuery( "<div></div>" ),
+               fixture = jQuery( "#qunit-fixture" );
+ 
+-      div.html( valueObj( "<div id='parent_1'><div id='child_1'/></div><div 
id='parent_2'/>" ) );
++      div.html( valueObj( "<div id='parent_1'><div 
id='child_1'></div></div><div id='parent_2'></div>" ) );
+       assert.equal( div.children().length, 2, "Found children" );
+       assert.equal( div.children().children().length, 1, "Found grandchild" );
+ 
+       actual = []; expected = [];
+-      tmp = jQuery( "<map/>" ).html( valueObj( "<area alt='area'/>" ) ).each( 
function() {
++      tmp = jQuery( "<map></map>" ).html( valueObj( "<area 
alt='area'></area>" ) ).each( function() {
+               expected.push( "AREA" );
+               actual.push( childNodeNames( this ) );
+       } );
+@@ -1748,7 +1748,7 @@
+       assert.equal( expected.length, 1, "Expecting one parent" );
+       assert.deepEqual( actual, expected, "Found the inserted style element" 
);
+ 
+-      fixture.html( valueObj( "<select/>" ) );
++      fixture.html( valueObj( "<select></select>" ) );
+       jQuery( "#qunit-fixture select" ).html( valueObj( 
"<option>O1</option><option selected='selected'>O2</option><option>O3</option>" 
) );
+       assert.equal( jQuery( "#qunit-fixture select" ).val(), "O2", "Selected 
option correct" );
+ 
+@@ -1867,7 +1867,7 @@
+ 
+       assert.equal( j.html().replace( / xmlns="[^"]+"/g, "" ).toLowerCase(), 
"<b>bold</b>", "Check node,textnode,comment with html()" );
+ 
+-      $div = jQuery( "<div />" );
++      $div = jQuery( "<div></div>" );
+ 
+       assert.equal( $div.html( function( i, val ) {
+               assert.equal( val, "", "Make sure the incoming value is 
correct." );
+@@ -1879,7 +1879,7 @@
+               return 0;
+       } ).html(), "0", "Setting a zero as html" );
+ 
+-      $div2 = jQuery( "<div/>" );
++      $div2 = jQuery( "<div></div>" );
+       insert = "&lt;div&gt;hello1&lt;/div&gt;";
+       assert.equal( $div2.html( function( i, val ) {
+               assert.equal( val, "", "Make sure the incoming value is 
correct." );
+@@ -2175,7 +2175,7 @@
+ QUnit.test( "jQuery.cleanData eliminates all private data (gh-2127)", 
function( assert ) {
+       assert.expect( 3 );
+ 
+-      var div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
++      var div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" );
+ 
+       jQuery._data( div[ 0 ], "gh-2127", "testing" );
+ 
+@@ -2195,7 +2195,7 @@
+       assert.expect( 3 );
+ 
+       var key,
+-              div = jQuery( "<div/>" );
++              div = jQuery( "<div></div>" );
+       div.data( "some", "data" );
+       assert.ok( !jQuery.isEmptyObject( jQuery.data( div[ 0 ] ) ),  "Ensure 
some public data exists" );
+ 
+@@ -2217,7 +2217,7 @@
+ 
+       // DOM manipulation fails if added text matches an Object method
+       var i,
+-              $f = jQuery( "<div />" ).appendTo( "#qunit-fixture" ),
++              $f = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ),
+               bad = [ "start-", "toString", "hasOwnProperty", "append", 
"here&there!", "-end" ];
+ 
+       for ( i = 0; i < bad.length; i++ ) {
+@@ -2365,7 +2365,7 @@
+       var div;
+ 
+       try {
+-              div = jQuery( "<div/><hr/><code/><b/>" );
++              div = jQuery( "<div></div><hr/><code></code><b></b>" );
+       } catch ( e ) {}
+ 
+       assert.ok( div && div.jquery, "Created nodes safely, guarded against 
exceptions on safeChildNodes[ -1 ]" );
+@@ -2375,11 +2375,11 @@
+ 
+       assert.expect( 5 );
+ 
+-      assert.strictEqual( jQuery( "<div/>" ).clone().addClass( "test" 
).appendTo( "<div/>" ).end().end().hasClass( "test" ), false, "Check 
jQuery.fn.appendTo after jQuery.clone" );
+-      assert.strictEqual( jQuery( "<div/>" ).find( "p" ).end().addClass( 
"test" ).appendTo( "<div/>" ).end().end().hasClass( "test" ), false, "Check 
jQuery.fn.appendTo after jQuery.fn.find" );
+-      assert.strictEqual( jQuery( "<div/>" ).text( "test" ).addClass( "test" 
).appendTo( "<div/>" ).end().end().hasClass( "test" ), false, "Check 
jQuery.fn.appendTo after jQuery.fn.text" );
+-      assert.strictEqual( jQuery( "<bdi/>" ).clone().addClass( "test" 
).appendTo( "<div/>" ).end().end().hasClass( "test" ), false, "Check 
jQuery.fn.appendTo after clone html5 element" );
+-      assert.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" );
++      assert.strictEqual( jQuery( "<div></div>" ).clone().addClass( "test" 
).appendTo( "<div></div>" ).end().end().hasClass( "test" ), false, "Check 
jQuery.fn.appendTo after jQuery.clone" );
++      assert.strictEqual( jQuery( "<div></div>" ).find( "p" ).end().addClass( 
"test" ).appendTo( "<div></div>" ).end().end().hasClass( "test" ), false, 
"Check jQuery.fn.appendTo after jQuery.fn.find" );
++      assert.strictEqual( jQuery( "<div></div>" ).text( "test" ).addClass( 
"test" ).appendTo( "<div></div>" ).end().end().hasClass( "test" ), false, 
"Check jQuery.fn.appendTo after jQuery.fn.text" );
++      assert.strictEqual( jQuery( "<bdi></bdi>" ).clone().addClass( "test" 
).appendTo( "<div></div>" ).end().end().hasClass( "test" ), false, "Check 
jQuery.fn.appendTo after clone html5 element" );
++      assert.strictEqual( jQuery( "<p></p>" ).appendTo( "<div></div>" 
).end().length, jQuery( "<p>test</p>" ).appendTo( "<div></div>" ).end().length, 
"Elements created with createElement and with createDocumentFragment should be 
treated alike" );
+ } );
+ 
+ QUnit.asyncTest( "html() - script exceptions bubble (#11743)", 2, function( 
assert ) {
+@@ -2468,7 +2468,7 @@
+                       "<script>ok( true, 'evaluated: inner no type' 
);</script>",
+               "</div>"
+       ].join( "" ) );
+-      scriptsIn.appendTo( jQuery( "<div class='detached'/>" ) );
++      scriptsIn.appendTo( jQuery( "<div class='detached'></div>" ) );
+       objGlobal.ok = isOk;
+ 
+       scriptsOut = fixture.append( scriptsIn ).find( "script" );
+@@ -2485,7 +2485,7 @@
+ 
+       if ( jQuery.ajax ) {
+               Globals.register( "testBar" );
+-              jQuery( "#qunit-fixture" ).append( "<script src='" + url( 
"mock.php?action=testbar" ) + "'/>" );
++              jQuery( "#qunit-fixture" ).append( "<script src='" + url( 
"mock.php?action=testbar" ) + "'></script>" );
+               assert.strictEqual( window.testBar, "bar", "Global script 
evaluation" );
+       } else {
+               assert.ok( true, "No jQuery.ajax" );
+@@ -2507,7 +2507,7 @@
+               assert.equal( ( input.url || input ).slice( -1 ), 
expectedArgument, message );
+               expectedArgument++;
+       };
+-      jQuery( "#qunit-fixture" ).append( "<script src='1'/><script src='2'/>" 
);
++      jQuery( "#qunit-fixture" ).append( "<script src='1'></script><script 
src='2'></script>" );
+       assert.equal( expectedArgument, 3, "synchronous execution" );
+ 
+       message = "custom implementation";
+@@ -2516,7 +2516,7 @@
+       jQuery.ajax = function( options ) {
+               assert.strictEqual( options, {}, "Unexpected call to 
jQuery.ajax" );
+       };
+-      jQuery( "#qunit-fixture" ).append( "<script src='3'/><script src='4'/>" 
);
++      jQuery( "#qunit-fixture" ).append( "<script src='3'></script><script 
src='4'></script>" );
+ 
+       jQuery.ajax = ajax;
+       jQuery._evalUrl = evalUrl;
+@@ -2530,7 +2530,7 @@
+               invocations = 0,
+               done = assert.async(),
+               htmlPrefilter = jQuery.htmlPrefilter,
+-              fixture = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ),
++              fixture = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ),
+               poison = "<script>jQuery.htmlPrefilter.assert.ok( false, 
'script not executed' );</script>";
+ 
+       jQuery.htmlPrefilter = function( html ) {
+@@ -2546,7 +2546,7 @@
+       expectedArgument = "A-" + poison + "B-" + poison + poison + "C-";
+       fixture.html( expectedArgument );
+ 
+-      expectedArgument = "D-" + poison + "E-" + "<del/><div>" + poison + 
poison + "</div>" + "F-";
++      expectedArgument = "D-" + poison + "E-" + "<del></del><div>" + poison + 
poison + "</div>" + "F-";
+       fixture.append( expectedArgument );
+ 
+       expectedArgument = poison;
+@@ -2601,7 +2601,7 @@
+ 
+       var i = 0;
+ 
+-      jQuery( "<div/><div/>" ).before( function( index ) {
++      jQuery( "<div></div><div></div>" ).before( function( index ) {
+               assert.equal( index, i++, "Index should be correct" );
+       } );
+ 
+@@ -2627,7 +2627,7 @@
+                       thead: "<tr><td>thead</td></tr>",
+                       tbody: "<tr><td>tbody</td></tr>",
+                       tfoot: "<tr><td>tfoot</td></tr>",
+-                      colgroup: "<col span='5' />",
++                      colgroup: "<col span='5'></col>",
+                       caption: "caption",
+                       tr: "<td>tr</td>",
+                       th: "th",
+@@ -2644,23 +2644,19 @@
+               args.push( html );
+       } );
+ 
+-      jQuery.fn.append.apply( jQuery( "<div/>" ), args ).children().each( 
function( i ) {
++      jQuery.fn.append.apply( jQuery( "<div></div>" ), args 
).children().each( function( i ) {
+               assert.ok( this.nodeName.toLowerCase() === results[ i ] );
+       } );
+ } );
+ 
+ QUnit.test( "Validate creation of multiple quantities of certain elements 
(#13818)", function( assert ) {
+-      assert.expect( 44 );
++      assert.expect( 22 );
+ 
+       var tags = [ "thead", "tbody", "tfoot", "colgroup", "col", "caption", 
"tr", "th", "td", "optgroup", "option" ];
+ 
+       jQuery.each( tags, function( index, tag ) {
+-              jQuery( "<" + tag + "/><" + tag + "/>" ).each( function() {
+-                      assert.ok( this.nodeName.toLowerCase() === tag, tag + " 
empty elements created correctly" );
+-              } );
+-
+-              jQuery( "<" + this + "></" + tag + "><" + tag + "></" + tag + 
">" ).each( function() {
+-                      assert.ok( this.nodeName.toLowerCase() === tag, tag + " 
elements with closing tag created correctly" );
++              jQuery( "<" + tag + "></" + tag + "><" + tag + "></" + tag + 
">" ).each( function() {
++                      assert.ok( this.nodeName.toLowerCase() === tag, tag + " 
elements created correctly" );
+               } );
+       } );
+ } );
+@@ -2708,7 +2704,7 @@
+       table.appendChild( document.createElement( "tbody" ) );
+       document.getElementById( "qunit-fixture" ).appendChild( table );
+ 
+-      jQuery( table ).append( "<tfoot/>" );
++      jQuery( table ).append( "<tfoot></tfoot>" );
+ 
+       // Lowercase and replace spaces to remove possible browser 
inconsistencies
+       html = table.innerHTML.toLowerCase().replace( /\s/g, "" );
+@@ -2747,7 +2743,7 @@
+ 
+       jQuery( table ).appendTo( "#qunit-fixture" );
+ 
+-      jQuery( "<col width='150'/>" ).prependTo( table );
++      jQuery( "<col width='150'></col>" ).prependTo( table );
+ 
+       assert.strictEqual( table.find( "td" ).width(), 150 );
+ } );
+@@ -2762,7 +2758,7 @@
+                       "</td></tr></thead>",
+               newRow = "<tr><td>added</td></tr>",
+               htmlExpected = htmlIn.replace( "</thead>", "</thead>" + newRow 
),
+-              table = supportjQuery( "<table/>" ).html( htmlIn ).appendTo( 
"#qunit-fixture" )[ 0 ];
++              table = supportjQuery( "<table></table>" ).html( htmlIn 
).appendTo( "#qunit-fixture" )[ 0 ];
+ 
+       jQuery( table ).append( newRow );
+ 
+--- a/test/unit/offset.js
++++ b/test/unit/offset.js
+@@ -5,7 +5,7 @@
+ }
+ 
+ var supportsFixedPosition, supportsScroll, alwaysScrollable,
+-      forceScroll = supportjQuery( "<div/>" ).css( { width: 2000, height: 
2000 } ),
++      forceScroll = supportjQuery( "<div></div>" ).css( { width: 2000, 
height: 2000 } ),
+       checkSupport = function( assert ) {
+ 
+               // Only run once
+@@ -81,7 +81,7 @@
+ QUnit.test( "hidden (display: none) element", function( assert ) {
+       assert.expect( 4 );
+ 
+-      var node = jQuery( "<div style='display: none' />" ).appendTo( 
"#qunit-fixture" ),
++      var node = jQuery( "<div style='display: none'></div>" ).appendTo( 
"#qunit-fixture" ),
+               result = node.offset();
+ 
+       node.remove();
+@@ -98,7 +98,7 @@
+ QUnit.test( "0 sized element", function( assert ) {
+       assert.expect( 4 );
+ 
+-      var node = jQuery( "<div style='margin: 5px; width: 0; height: 0' />" 
).appendTo( "#qunit-fixture" ),
++      var node = jQuery( "<div style='margin: 5px; width: 0; height: 
0'></div>" ).appendTo( "#qunit-fixture" ),
+               result = node.offset();
+ 
+       node.remove();
+@@ -112,7 +112,7 @@
+ QUnit.test( "hidden (visibility: hidden) element", function( assert ) {
+       assert.expect( 4 );
+ 
+-      var node = jQuery( "<div style='margin: 5px; visibility: hidden' />" 
).appendTo( "#qunit-fixture" ),
++      var node = jQuery( "<div style='margin: 5px; visibility: 
hidden'></div>" ).appendTo( "#qunit-fixture" ),
+               result = node.offset();
+ 
+       node.remove();
+@@ -783,7 +783,7 @@
+ QUnit.test( "fractions (see #7730 and #7885)", function( assert ) {
+       assert.expect( 2 );
+ 
+-      jQuery( "body" ).append( "<div id='fractions'/>" );
++      jQuery( "body" ).append( "<div id='fractions'></div>" );
+ 
+       var result,
+               expected = { "top": 1000, "left": 1000 },
+--- a/test/unit/selector.js
++++ b/test/unit/selector.js
+@@ -92,7 +92,7 @@
+ QUnit.test( "selectors with comma", function( assert ) {
+       assert.expect( 4 );
+ 
+-      var fixture = jQuery( 
"<div><h2><span/></h2><div><p><span/></p><p/></div></div>" );
++      var fixture = jQuery( 
"<div><h2><span></span></h2><div><p><span></span></p><p></p></div></div>" );
+ 
+       assert.equal( fixture.find( "h2, div p" ).filter( "p" ).length, 2, "has 
to find two <p>" );
+       assert.equal( fixture.find( "h2, div p" ).filter( "h2" ).length, 1, 
"has to find one <h2>" );
+@@ -275,7 +275,7 @@
+ QUnit.test( "disconnected nodes", function( assert ) {
+       assert.expect( 1 );
+ 
+-      var $div = jQuery( "<div/>" );
++      var $div = jQuery( "<div></div>" );
+       assert.equal( $div.is( "div" ), true, "Make sure .is('nodeName') works 
on disconnected nodes." );
+ } );
+ 
+--- a/test/unit/traversing.js
++++ b/test/unit/traversing.js
+@@ -197,7 +197,7 @@
+ 
+       assert.equal( jQuery( "#text2" ).index(), 2, "Returns the index of a 
child amongst its siblings" );
+ 
+-      assert.equal( jQuery( "<div/>" ).index(), -1, "Node without parent 
returns -1" );
++      assert.equal( jQuery( "<div></div>" ).index(), -1, "Node without parent 
returns -1" );
+ } );
+ 
+ QUnit.test( "index(Object|String|undefined)", function( assert ) {
+@@ -502,7 +502,7 @@
+       obj = jQuery( "#qunit-fixture" ).has( jQuery( "#sndp" )[ 0 ] );
+       assert.deepEqual( obj.get(), q( "qunit-fixture" ), "Keeps elements that 
have the element as a descendant" );
+ 
+-      detached = jQuery( "<a><b><i/></b></a>" );
++      detached = jQuery( "<a><b><i></i></b></a>" );
+       assert.deepEqual( detached.has( detached.find( "i" )[ 0 ] ).get(), 
detached.get(), "...Even when detached" );
+ 
+       multipleParent = jQuery( "#qunit-fixture, #header" ).has( jQuery( 
"#sndp" )[ 0 ] );
+@@ -517,7 +517,7 @@
+       obj = jQuery( "#qunit-fixture" ).has( "#sndp" );
+       assert.deepEqual( obj.get(), q( "qunit-fixture" ), "Keeps elements that 
have any element matching the selector as a descendant" );
+ 
+-      detached = jQuery( "<a><b><i/></b></a>" );
++      detached = jQuery( "<a><b><i></i></b></a>" );
+       assert.deepEqual( detached.has( "i" ).get(), detached.get(), "...Even 
when detached" );
+ 
+       multipleParent = jQuery( "#qunit-fixture, #header" ).has( "#sndp" );
+@@ -538,7 +538,7 @@
+       simple = jQuery( "#qunit-fixture" ).has( jQuery( "#sndp" ) );
+       assert.deepEqual( simple.get(), q( "qunit-fixture" ), "Keeps elements 
that have any element in the jQuery list as a descendant" );
+ 
+-      detached = jQuery( "<a><b><i/></b></a>" );
++      detached = jQuery( "<a><b><i></i></b></a>" );
+       assert.deepEqual( detached.has( detached.find( "i" ) ).get(), 
detached.get(), "...Even when detached" );
+ 
+       multipleParent = jQuery( "#qunit-fixture, #header" ).has( jQuery( 
"#sndp" ) );
+@@ -566,7 +566,7 @@
+       var set = q( "sndp", "en", "sap" );
+       assert.deepEqual( jQuery( "#en, #sndp" ).siblings().get(), set, "Check 
for unique results from siblings" );
+       assert.deepEqual( jQuery( "#option5a" ).siblings( "option[data-attr]" 
).get(), q( "option5c" ), "Has attribute selector in siblings (#9261)" );
+-      assert.equal( jQuery( "<a/>" ).siblings().length, 0, "Detached elements 
have no siblings (#11370)" );
++      assert.equal( jQuery( "<a></a>" ).siblings().length, 0, "Detached 
elements have no siblings (#11370)" );
+ } );
+ 
+ QUnit[ jQuery.find.compile ? "test" : "skip" ]( "siblings([String])", 
function( assert ) {
+@@ -733,7 +733,7 @@
+ 
+       assert.equal( jQuery( "div", ibody ).text(), "span text", "Make sure 
the correct div is still left after deletion in IFrame" );
+ 
+-      jQuery( "<table/>", ibody ).append( "<tr><td>cell</td></tr>" 
).appendTo( ibody );
++      jQuery( "<table></table>", ibody ).append( "<tr><td>cell</td></tr>" 
).appendTo( ibody );
+       jQuery( "table", ibody ).remove();
+       assert.equal( jQuery( "div", ibody ).length, 1, "Check for JS error on 
add and delete of a table in IFrame" );
+ 
+@@ -761,7 +761,7 @@
+ 
+     assert.equal( contents.find( "span" ).text(), "Hello, Web Component!", 
"Find span in template and check its text" );
+ 
+-    jQuery( "<div id='templateTest' />" ).append(
++    jQuery( "<div id='templateTest'></div>" ).append(
+         jQuery( jQuery.map( contents, function( node ) {
+             return document.importNode( node, true );
+         } ) )
+@@ -832,7 +832,7 @@
+               "Check elements from document"
+       );
+ 
+-      divs = jQuery( "<div/>" ).add( "#sndp" );
++      divs = jQuery( "<div></div>" ).add( "#sndp" );
+       assert.ok( divs[ 0 ].parentNode, "Sort with the disconnected node last 
(started with disconnected first)." );
+ } );
+ 
+@@ -850,7 +850,7 @@
+       assert.expect( 3 );
+ 
+       var x,
+-              divs = jQuery( "#sndp" ).add( "<div/>" );
++              divs = jQuery( "#sndp" ).add( "<div></div>" );
+ 
+       assert.ok( !divs[ 1 ].parentNode, "Sort with the disconnected node 
last." );
+ 
+@@ -863,7 +863,7 @@
+       assert.expect( 4 );
+ 
+       var x,
+-              tmp = jQuery( "<div/>" );
++              tmp = jQuery( "<div></div>" );
+ 
+       x = jQuery( [] )
+       .add(
+@@ -892,7 +892,7 @@
+       assert.expect( 2 );
+ 
+       var x,
+-              tmp = jQuery( "<div/>" );
++              tmp = jQuery( "<div></div>" );
+ 
+       x = jQuery( [] ).add( jQuery( "<p id='x1'>xxx</p>" ).appendTo( tmp )[ 0 
] ).add( jQuery( "<p id='x2'>xxx</p>" ).appendTo( tmp )[ 0 ] );
+       assert.equal( x[ 0 ].id, "x1", "Check on-the-fly element1" );
+--- a/test/unit/wrap.js
++++ b/test/unit/wrap.js
+@@ -74,7 +74,7 @@
+               cacheLength++;
+       }
+ 
+-      j = jQuery( "<label/>" ).wrap( val( "<li/>" ) );
++      j = jQuery( "<label></label>" ).wrap( val( "<li></li>" ) );
+       assert.equal(
+               j[ 0 ] .nodeName.toUpperCase(), "LABEL", "Element is a label"
+       );
+@@ -90,7 +90,7 @@
+       );
+ 
+       // Wrap an element containing a text node
+-      j = jQuery( "<span/>" ).wrap( "<div>test</div>" );
++      j = jQuery( "<span></span>" ).wrap( "<div>test</div>" );
+       assert.equal(
+               j[ 0 ].previousSibling.nodeType, 3, "Make sure the previous 
node is a text element"
+       );
+@@ -112,7 +112,7 @@
+       );
+ 
+       // Wrap an element with a jQuery set
+-      j = jQuery( "<span/>" ).wrap( jQuery( "<div></div>" ) );
++      j = jQuery( "<span></span>" ).wrap( jQuery( "<div></div>" ) );
+       assert.equal(
+               j[ 0 ].parentNode.nodeName.toLowerCase(), "div", "Wrapping 
works."
+       );
+@@ -128,7 +128,7 @@
+               jQuery( this ).off();
+       } );
+ 
+-      j = jQuery( "<span/>" ).wrap( result );
++      j = jQuery( "<span></span>" ).wrap( result );
+       assert.equal(
+               j[ 0 ].parentNode.nodeName.toLowerCase(), "div", "Wrapping 
works."
+       );
+@@ -313,7 +313,7 @@
+       assert.expect( 5 );
+ 
+       var num,
+-              div = jQuery( "<div/>" );
++              div = jQuery( "<div></div>" );
+ 
+       num = jQuery( "#first" ).children().length;
+       jQuery( "#first" ).wrapInner( document.getElementById( "empty" ) );
+@@ -375,7 +375,7 @@
+ 
+       var num,
+     val = manipulationFunctionReturningObj,
+-              div = jQuery( "<div/>" );
++              div = jQuery( "<div></div>" );
+ 
+       num = jQuery( "#first" ).children().length;
+       jQuery( "#first" ).wrapInner( val( document.getElementById( "empty" ) ) 
);
diff -Nru jquery-3.3.1~dfsg/debian/patches/CVE-2020-11023.patch 
jquery-3.3.1~dfsg/debian/patches/CVE-2020-11023.patch
--- jquery-3.3.1~dfsg/debian/patches/CVE-2020-11023.patch       1969-12-31 
19:00:00.000000000 -0500
+++ jquery-3.3.1~dfsg/debian/patches/CVE-2020-11023.patch       2021-03-09 
14:42:16.000000000 -0500
@@ -0,0 +1,163 @@
+From 966a70909019aa09632c87c0002c522fa4a1e30e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?=
+ <m.go...@gmail.com>
+Date: Mon, 30 Mar 2020 20:15:09 +0200
+Subject: [PATCH] Manipulation: Skip the select wrapper for <option> outside of
+ IE 9
+
+Closes gh-4647
+---
+ src/manipulation/support.js |  6 ++++++
+ src/manipulation/wrapMap.js | 15 ++++++++-------
+ test/unit/support.js        | 13 +++++++++++++
+ 3 files changed, 27 insertions(+), 7 deletions(-)
+
+--- a/src/manipulation/support.js
++++ b/src/manipulation/support.js
+@@ -28,6 +28,12 @@
+       // Make sure textarea (and checkbox) defaultValue is properly cloned
+       div.innerHTML = "<textarea>x</textarea>";
+       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
++
++      // Support: IE <=9 only
++      // IE <=9 replaces <option> tags with their contents when inserted 
outside of
++      // the select element.
++      div.innerHTML = "<option></option>";
++      support.option = !!div.lastChild;
+ } )();
+ 
+ return support;
+--- a/src/manipulation/wrapMap.js
++++ b/src/manipulation/wrapMap.js
+@@ -1,13 +1,12 @@
+-define( function() {
++define( [
++      "./support"
++], function( support ) {
+ 
+ "use strict";
+ 
+ // We have to close these tags to support XHTML (#13200)
+ var wrapMap = {
+ 
+-      // Support: IE <=9 only
+-      option: [ 1, "<select multiple='multiple'>", "</select>" ],
+-
+       // XHTML parsers do not magically insert elements in the
+       // same way that tag soup parsers do. So we cannot shorten
+       // this by omitting <tbody> or other required elements.
+@@ -19,11 +18,13 @@
+       _default: [ 0, "", "" ]
+ };
+ 
+-// Support: IE <=9 only
+-wrapMap.optgroup = wrapMap.option;
+-
+ wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = 
wrapMap.thead;
+ wrapMap.th = wrapMap.td;
+ 
++// Support: IE <=9 only
++if ( !support.option ) {
++      wrapMap.optgroup = wrapMap.option = [ 1, "<select 
multiple='multiple'>", "</select>" ];
++}
++
+ return wrapMap;
+ } );
+--- a/test/unit/support.js
++++ b/test/unit/support.js
+@@ -69,6 +69,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": true,
+                       "pixelPosition": true,
+@@ -87,6 +88,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": true,
+                       "noCloneChecked": false,
++                      "option": true,
+                       "optSelected": false,
+                       "pixelBoxStyles": true,
+                       "pixelPosition": true,
+@@ -105,6 +107,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": true,
+                       "noCloneChecked": false,
++                      "option": false,
+                       "optSelected": false,
+                       "pixelBoxStyles": true,
+                       "pixelPosition": true,
+@@ -126,6 +129,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": true,
+                       "pixelPosition": true,
+@@ -144,6 +148,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": true,
+                       "pixelPosition": true,
+@@ -162,6 +167,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": false,
+                       "pixelPosition": false,
+@@ -180,6 +186,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": true,
+                       "pixelPosition": true,
+@@ -198,6 +205,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": true,
+                       "pixelPosition": true,
+@@ -216,6 +224,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": false,
+                       "pixelPosition": false,
+@@ -234,6 +243,7 @@
+                       "createHTMLDocument": false,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": false,
+                       "pixelPosition": false,
+@@ -252,6 +262,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": false,
+                       "pixelPosition": false,
+@@ -270,6 +281,7 @@
+                       "createHTMLDocument": true,
+                       "focusin": false,
+                       "noCloneChecked": true,
++                      "option": true,
+                       "optSelected": true,
+                       "pixelBoxStyles": false,
+                       "pixelPosition": false,
diff -Nru jquery-3.3.1~dfsg/debian/patches/series 
jquery-3.3.1~dfsg/debian/patches/series
--- jquery-3.3.1~dfsg/debian/patches/series     2019-04-19 02:49:02.000000000 
-0400
+++ jquery-3.3.1~dfsg/debian/patches/series     2021-03-09 14:42:16.000000000 
-0500
@@ -1 +1,3 @@
 SNYK-JS-JQUERY-174006.diff
+CVE-2020-11022.patch
+CVE-2020-11023.patch

Reply via email to