Skip to content

Commit cdb1eeb

Browse files
committed
Core: Compare documents created by parsed HTML
1 parent f00ab19 commit cdb1eeb

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/core.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ var oldInit = jQuery.fn.init,
1010
// Make sure we trim BOM and NBSP
1111
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
1212

13+
var makeMarkup = function( html ) {
14+
var createDoc = window.document.implementation.createHTMLDocument;
15+
if ( !createDoc ) {
16+
return;
17+
}
18+
var doc = window.document.implementation.createHTMLDocument( "", "", null );
19+
doc.open( "replace" );
20+
doc.write( html );
21+
doc.close();
22+
return doc.body && doc.body.innerHTML;
23+
};
24+
1325
jQuery.fn.init = function( arg1 ) {
1426
var args = Array.prototype.slice.call( arguments ),
1527
changed;
@@ -23,12 +35,12 @@ jQuery.fn.init = function( arg1 ) {
2335

2436
if ( typeof arg1 === "string" && arg1.trim().charAt( 0 ) === "<" ) {
2537
if ( !rsingleTag.test( arg1 ) ) {
26-
changed = arg1.replace( rxhtmlTag, "<$1></$2>" );
27-
if ( changed !== arg1 ) {
28-
migrateWarn( "HTML tags must be properly nested and closed: " + arg1 );
38+
changed = arg1.replace( rxhtmlTag, "<$1></$2>" );
39+
if ( changed !== arg1 && makeMarkup( arg1 ) !== makeMarkup( changed ) ) {
40+
migrateWarn( "HTML tags must be properly nested and closed: " + arg1 );
41+
}
2942
}
3043
}
31-
}
3244

3345
return oldInit.apply( this, args );
3446
};

test/core.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ QUnit.test( "Improperly closed elements", function( assert ) {
7474
jQuery( "<div data-borked='y'><span/> <p/></div>" );
7575
} );
7676

77-
expectWarning( assert, "Elements not self-closable", 3, function() {
77+
expectNoWarning( assert, "Elements not self-closable but tolerable", function() {
7878
jQuery( "<div class=wonky />" );
7979
jQuery( "<p style='width: 2%' />" );
8080
jQuery( "<span aria-label='hello' />" );

0 commit comments

Comments
 (0)