[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#984896: marked as done (buster-pu: package jquery/3.3.1~dfsg-3)



Your message dated Sat, 27 Mar 2021 10:26:45 +0000
with message-id <702e3cb8159c9986264e966af79023672688a8a4.camel@adam-barratt.org.uk>
and subject line Closing p-u requests for fixes included in 10.9 point release
has caused the Debian Bug report #984896,
regarding buster-pu: package jquery/3.3.1~dfsg-3
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
984896: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=984896
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian.org@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 <roberto@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.goleb@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.goleb@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

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 10.9

Hi,

Each of the updates referenced in these bugs was included in the 10.9
point release today.

Regards,

Adam

--- End Message ---

Reply to: