diff --git a/src/manipulation.js b/src/manipulation.js index e9b1ee5388..1362604500 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -10,6 +10,7 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], legend: [ 1, "
", "
" ], @@ -500,7 +501,7 @@ jQuery.each({ function getAll( elem ) { if ( "getElementsByTagName" in elem ) { return elem.getElementsByTagName( "*" ); - + } else if ( "querySelectorAll" in elem ) { return elem.querySelectorAll( "*" ); @@ -738,7 +739,7 @@ function evalScript( i, elem ) { dataType: "script" }); } else { - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) ); } if ( elem.parentNode ) { diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js index 972cfaf91d..0f980463f2 100644 --- a/test/unit/manipulation.js +++ b/test/unit/manipulation.js @@ -1044,7 +1044,7 @@ test("clone(form element) (Bug #3879, #6655)", function() { equals( clone.is(":checked"), element.is(":checked"), "Checked input cloned correctly" ); equals( clone[0].defaultValue, "foo", "Checked input defaultValue cloned correctly" ); - + // defaultChecked also gets set now due to setAttribute in attr, is this check still valid? // equals( clone[0].defaultChecked, !jQuery.support.noCloneChecked, "Checked input defaultChecked cloned correctly" ); @@ -1396,3 +1396,21 @@ test("jQuery.buildFragment - no plain-text caching (Bug #6779)", function() { equals($f.text(), bad.join(""), "Cached strings that match Object properties"); $f.remove(); }); + +test( "jQuery.html - execute scripts escaped with html comment or CDATA (#9221)", function() { + expect( 2 ); + jQuery( [ + '' + ].join ( "\n" ) ).appendTo( "#qunit-fixture" ); + jQuery( [ + '' + ].join ( "\n" ) ).appendTo( "#qunit-fixture" ); +});