]> source.dussan.org Git - jquery.git/commitdiff
Fix #12920: remove addMandatoryAttributes. Close gh-1037.
authorRichard Gibson <richard.gibson@gmail.com>
Wed, 21 Nov 2012 03:57:41 +0000 (22:57 -0500)
committerRichard Gibson <richard.gibson@gmail.com>
Wed, 21 Nov 2012 03:57:41 +0000 (22:57 -0500)
src/manipulation.js
test/unit/manipulation.js

index c1097b20c9f3ac6bbb464da16b68e6f9f094a1b9..b179dab2eff90172d43e5c5396ecc9e2238a8916 100644 (file)
@@ -32,44 +32,24 @@ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figca
        wrapMap = {
                option: [ 1, "<select multiple='multiple'>", "</select>" ],
                legend: [ 1, "<fieldset>", "</fieldset>" ],
+               area: [ 1, "<map>", "</map>" ],
+               param: [ 1, "<object>", "</object>" ],
                thead: [ 1, "<table>", "</table>" ],
                tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
                col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-               area: [ 1, "<map>", "</map>" ],
-               _default: [ 0, "", "" ]
+               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+               // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+               // unless wrapped in a div with non-breaking characters in front of it.
+               _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "" ]
        },
        safeFragment = createSafeFragment( document ),
-       fragmentDiv = safeFragment.appendChild( document.createElement("div") ),
-       addMandatoryAttributes = function( elem ) { return elem; };
+       fragmentDiv = safeFragment.appendChild( document.createElement("div") );
 
 wrapMap.optgroup = wrapMap.option;
 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
 wrapMap.th = wrapMap.td;
 
-// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
-// unless wrapped in a div with non-breaking characters in front of it.
-if ( !jQuery.support.htmlSerialize ) {
-       wrapMap._default = [ 1, "X<div>", "" ];
-       // Fixes #11280
-       wrapMap.param = [ 1, "X<object>", "" ];
-       // Fixes #11280. HTMLParam name attribute added to avoid IE6-8 parsing issue.
-       addMandatoryAttributes = function( elem ) {
-               // If it's a param
-               return elem.replace(/<param([^>]*)>/gi, function( m, s1, offset ) {
-                       var name = s1.match( /name=["']([^"']*)["']/i );
-                       return name ?
-                               ( name[1].length ?
-                               // It has a name attr with a value
-                               "<param" + s1 + ">" :
-                               // It has name attr without a value
-                               "<param" + s1.replace( name[0], "name='_" + offset +  "'" ) + ">" ) :
-                               // No name attr
-                               "<param name='_" + offset +  "' " + s1 + ">";
-               });
-       };
-}
-
 jQuery.fn.extend({
        text: function( value ) {
                return jQuery.access( this, function( value ) {
@@ -733,7 +713,7 @@ jQuery.extend({
                                        // Deserialize a standard representation
                                        tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
                                        wrap = wrapMap[ tag ] || wrapMap._default;
-                                       tmp.innerHTML = wrap[1] + addMandatoryAttributes( elem.replace( rxhtmlTag, "<$1></$2>" ) ) + wrap[2];
+                                       tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
 
                                        // Descend through wrappers to the right content
                                        j = wrap[0];
index 8047bdf4925cc4edec8854878370a55336780bab..f08e7bd90ee36655e526fde92c2fdb3fc9e82d4d 100644 (file)
@@ -451,35 +451,19 @@ test("append(Function)", function() {
 });
 
 test("append(param) to object, see #11280", function() {
-       expect(11);
-
-       var objectElement = document.createElement("object"),
-               $objectElement = jQuery( objectElement ),
-               paramElement = jQuery("<param type='wmode' value='transparent'/>"),
-               paramElement2 = jQuery("<param name='' type='wmode2' value='transparent2' />"),
-               paramElement3 = jQuery("<param type='wmode' name='foo' >"),
-               newObject = jQuery("<object><param type='foo' ><param name='' value='foo2'/><param type='baz' name='bar'></object>");
-
-       equal( objectElement.childNodes.length, 0, "object did not have childNodes previously" );
-
-       document.body.appendChild( objectElement );
+       expect( 5 );
 
-       $objectElement.append( paramElement );
-       equal( $objectElement.children().length, 1, "param single insertion ok" );
-       equal( jQuery(objectElement.childNodes[0]).attr("type"), "wmode", "param.eq(0) has type=wmode" );
+       var object = jQuery( document.createElement("object") ).appendTo( document.body );
 
-       $objectElement.html( paramElement2 );
-       equal( $objectElement.children().length, 1, "param single insertion ok" );
-       equal( jQuery(objectElement.childNodes[0]).attr("type"), "wmode2", "param.eq(0) has type=wmode2" );
+       equal( object.children().length, 0, "object does not start with children" );
 
-       $objectElement.html( paramElement3 );
-       equal( $objectElement.children().length, 1, "param single insertion ok" );
-       equal( jQuery(objectElement.childNodes[0]).attr("name"), "foo", "param.eq(0) has name=foo" );
+       object.append( jQuery("<param type='wmode' name='foo'>") );
+       equal( object.children().length, 1, "appended param" );
+       equal( object.children().eq(0).attr("name"), "foo", "param has name=foo" );
 
-       equal( newObject.children().length, 3, "param wrapper multiple insertion ok" );
-       equal( newObject.children().eq(0).attr("type"), "foo", "param.eq(0) has type=foo" );
-       equal( newObject.children().eq(1).attr("value"), "foo2", "param.eq(1) has value=foo2" );
-       equal( newObject.children().eq(2).attr("name"), "bar", "param.eq(2) has name=bar" );
+       object = jQuery("<object><param type='baz' name='bar'></object>");
+       equal( object.children().length, 1, "object created with child param" );
+       equal( object.children().eq(0).attr("name"), "bar", "param has name=bar" );
 });
 
 test("append(Function) with incoming value", function() {