From ef7bce7e5c67f29a7e09ea1b0bb43b429fc9f59b Mon Sep 17 00:00:00 2001 From: Daniel Galvez Date: Tue, 16 Oct 2012 14:59:36 -0400 Subject: Fix #11280. IE6-8 need name attribute to parse param. Close gh-914. --- src/manipulation.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/manipulation.js b/src/manipulation.js index aced4567b..672e9a147 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -39,7 +39,8 @@ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figca _default: [ 0, "", "" ] }, safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + fragmentDiv = safeFragment.appendChild( document.createElement("div") ), + addMandatoryAttributes = function( elem ) { return elem; }; wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; @@ -49,6 +50,23 @@ wrapMap.th = wrapMap.td; // unless wrapped in a div with non-breaking characters in front of it. if ( !jQuery.support.htmlSerialize ) { wrapMap._default = [ 1, "X
", "
" ]; + // Fixes #11280 + wrapMap.param = [ 1, "X", "" ]; + // Fixes #11280. HTMLParam name attribute added to avoid IE6-8 parsing issue. + addMandatoryAttributes = function( elem ) { + // If it's a param + return elem.replace(/]*)>/gi, function( m, s1, offset ) { + var name = s1.match( /name=["']([^"']*)["']/i ); + return name ? + ( name[1].length ? + // It has a name attr with a value + "" : + // It has name attr without a value + "" ) : + // No name attr + ""; + }); + }; } jQuery.fn.extend({ @@ -674,7 +692,7 @@ jQuery.extend({ tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); wrap = wrapMap[ tag ] || wrapMap._default; depth = wrap[0]; - div.innerHTML = wrap[1] + elem + wrap[2]; + div.innerHTML = wrap[1] + addMandatoryAttributes( elem ) + wrap[2]; // Move to the right depth while ( depth-- ) { -- cgit v1.2.3