]> source.dussan.org Git - jquery.git/commitdiff
Manipulation: Properly detect HTML elements with single-character names
authorRichard Gibson <richard.gibson@gmail.com>
Fri, 13 Jul 2018 04:35:08 +0000 (00:35 -0400)
committerGitHub <noreply@github.com>
Fri, 13 Jul 2018 04:35:08 +0000 (00:35 -0400)
Fixes gh-4124
Closes gh-4125

src/core/var/rsingleTag.js
src/manipulation/var/rtagName.js
test/unit/manipulation.js

index 4d6e8a0ac7dad0ae2ae86e1e8c1c7fcb47f07c00..340b80db0706694265c8c5a672744203098f1317 100644 (file)
@@ -1,6 +1,7 @@
 define( function() {
        "use strict";
 
-       // Match a standalone tag
+       // rsingleTag matches a string consisting of a single HTML element with no attributes
+       // and captures the element's name
        return ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
 } );
index d565dd3de6f7e5f3780396afdd3e8dc0a0004584..7435620c1914746013ff25fbb037836d94956294 100644 (file)
@@ -1,5 +1,8 @@
 define( function() {
        "use strict";
 
-       return ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+       // rtagName captures the name from the first start tag in a string of HTML
+       // https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state
+       // https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state
+       return ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
 } );
index 660dad773b30bc88cdc769e53ea16da899b61731..28a62fe0b69825c4cbad9d6e136eb8dff594a221 100644 (file)
@@ -2772,6 +2772,21 @@ QUnit.test( "Make sure tr is not appended to the wrong tbody (gh-3439)", functio
        assert.strictEqual( htmlOut, htmlExpected );
 } );
 
+QUnit.test( "Make sure tags with single-character names are found (gh-4124)", function( assert ) {
+       assert.expect( 1 );
+
+       var htmlOut,
+               htmlIn = "<p>foo<!--<td>--></p>",
+               $el = jQuery( "<div/>" );
+
+       $el.html( htmlIn );
+
+       // Lowercase and replace spaces to remove possible browser inconsistencies
+       htmlOut = $el[ 0 ].innerHTML.toLowerCase().replace( /\s/g, "" );
+
+       assert.strictEqual( htmlOut, htmlIn );
+} );
+
 QUnit.test( "Insert script with data-URI (gh-1887)", 1, function( assert ) {
        Globals.register( "testFoo" );
        Globals.register( "testSrcFoo" );