mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Resurrect buildFragment and sacrifice jQuery.clean. See gh-1117.
This commit is contained in:
parent
ce67f0ce64
commit
0ed497b045
@ -496,8 +496,7 @@ jQuery.extend({
|
|||||||
return [ context.createElement( parsed[1] ) ];
|
return [ context.createElement( parsed[1] ) ];
|
||||||
}
|
}
|
||||||
|
|
||||||
parsed = context.createDocumentFragment();
|
parsed = jQuery.buildFragment( [ data ], context, scripts );
|
||||||
jQuery.clean( [ data ], context, parsed, scripts );
|
|
||||||
if ( scripts ) {
|
if ( scripts ) {
|
||||||
jQuery( scripts ).remove();
|
jQuery( scripts ).remove();
|
||||||
}
|
}
|
||||||
|
@ -310,8 +310,7 @@ jQuery.fn.extend({
|
|||||||
|
|
||||||
if ( this[0] ) {
|
if ( this[0] ) {
|
||||||
doc = this[0].ownerDocument;
|
doc = this[0].ownerDocument;
|
||||||
fragment = doc.createDocumentFragment();
|
fragment = jQuery.buildFragment( args, doc, false, this );
|
||||||
jQuery.clean( args, doc, fragment, undefined, this );
|
|
||||||
first = fragment.firstChild;
|
first = fragment.firstChild;
|
||||||
|
|
||||||
if ( fragment.childNodes.length === 1 ) {
|
if ( fragment.childNodes.length === 1 ) {
|
||||||
@ -556,7 +555,7 @@ function getAll( context, tag ) {
|
|||||||
found;
|
found;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used in clean, fixes the defaultChecked property
|
// Used in buildFragment, fixes the defaultChecked property
|
||||||
function fixDefaultChecked( elem ) {
|
function fixDefaultChecked( elem ) {
|
||||||
if ( manipulation_rcheckableType.test( elem.type ) ) {
|
if ( manipulation_rcheckableType.test( elem.type ) ) {
|
||||||
elem.defaultChecked = elem.checked;
|
elem.defaultChecked = elem.checked;
|
||||||
@ -619,9 +618,10 @@ jQuery.extend({
|
|||||||
return clone;
|
return clone;
|
||||||
},
|
},
|
||||||
|
|
||||||
clean: function( elems, context, fragment, scripts, selection ) {
|
buildFragment: function( elems, context, scripts, selection ) {
|
||||||
var elem, i, j, tmp, tag, wrap, tbody,
|
var elem, i, j, tmp, tag, wrap, tbody,
|
||||||
ret = [],
|
ret = [],
|
||||||
|
fragment = context.createDocumentFragment(),
|
||||||
safe = context === document && safeFragment;
|
safe = context === document && safeFragment;
|
||||||
|
|
||||||
// Ensure that context is a document
|
// Ensure that context is a document
|
||||||
@ -708,29 +708,27 @@ jQuery.extend({
|
|||||||
jQuery.grep( getAll( ret, "input" ), fixDefaultChecked );
|
jQuery.grep( getAll( ret, "input" ), fixDefaultChecked );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( fragment ) {
|
for ( i = 0; (elem = ret[i]) != null; i++ ) {
|
||||||
for ( i = 0; (elem = ret[i]) != null; i++ ) {
|
safe = jQuery.contains( elem.ownerDocument, elem );
|
||||||
safe = jQuery.contains( elem.ownerDocument, elem );
|
|
||||||
|
|
||||||
// Append to fragment
|
// Append to fragment
|
||||||
// #4087 - If origin and destination elements are the same, and this is
|
// #4087 - If origin and destination elements are the same, and this is
|
||||||
// that element, do not append to fragment
|
// that element, do not append to fragment
|
||||||
if ( !selection || jQuery.inArray( elem, selection ) === -1 ) {
|
if ( !selection || jQuery.inArray( elem, selection ) === -1 ) {
|
||||||
fragment.appendChild( elem );
|
fragment.appendChild( elem );
|
||||||
}
|
}
|
||||||
tmp = getAll( elem, "script" );
|
tmp = getAll( elem, "script" );
|
||||||
|
|
||||||
// Preserve script evaluation history
|
// Preserve script evaluation history
|
||||||
if ( safe ) {
|
if ( safe ) {
|
||||||
setGlobalEval( tmp );
|
setGlobalEval( tmp );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Capture executables
|
// Capture executables
|
||||||
if ( scripts ) {
|
if ( scripts ) {
|
||||||
for ( j = 0; (elem = tmp[j]) != null; j++ ) {
|
for ( j = 0; (elem = tmp[j]) != null; j++ ) {
|
||||||
if ( rscriptType.test( elem.type || "" ) ) {
|
if ( rscriptType.test( elem.type || "" ) ) {
|
||||||
scripts.push( elem );
|
scripts.push( elem );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -738,7 +736,7 @@ jQuery.extend({
|
|||||||
|
|
||||||
elem = tmp = safe = null;
|
elem = tmp = safe = null;
|
||||||
|
|
||||||
return ret;
|
return fragment;
|
||||||
},
|
},
|
||||||
|
|
||||||
cleanData: function( elems, /* internal */ acceptData ) {
|
cleanData: function( elems, /* internal */ acceptData ) {
|
||||||
|
@ -1210,7 +1210,7 @@ test("jQuery.proxy", function(){
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("jQuery.parseHTML", function() {
|
test("jQuery.parseHTML", function() {
|
||||||
expect( 13 );
|
expect( 17 );
|
||||||
|
|
||||||
var html, nodes;
|
var html, nodes;
|
||||||
|
|
||||||
@ -1237,6 +1237,13 @@ test("jQuery.parseHTML", function() {
|
|||||||
equal( jQuery.parseHTML( "\t<div></div>" )[0].nodeValue, "\t", "Preserve leading whitespace" );
|
equal( jQuery.parseHTML( "\t<div></div>" )[0].nodeValue, "\t", "Preserve leading whitespace" );
|
||||||
|
|
||||||
equal( jQuery.parseHTML(" <div/> ")[0].nodeType, 3, "Leading spaces are treated as text nodes (#11290)" );
|
equal( jQuery.parseHTML(" <div/> ")[0].nodeType, 3, "Leading spaces are treated as text nodes (#11290)" );
|
||||||
|
|
||||||
|
html = jQuery.parseHTML( "<div>test div</div>" );
|
||||||
|
equal( html[ 0 ].parentNode.nodeType, 11, "parentNode should be documentFragment" );
|
||||||
|
equal( html[ 0 ].innerHTML, "test div", "Content should be preserved" );
|
||||||
|
|
||||||
|
equal( jQuery.parseHTML("<span><span>").length, 1, "Incorrect html-strings should not break anything" );
|
||||||
|
equal( jQuery.parseHTML("<td><td>")[ 1 ].parentNode.nodeType, 11, "parentNode should be documentFragment" );
|
||||||
});
|
});
|
||||||
|
|
||||||
test("jQuery.parseJSON", function(){
|
test("jQuery.parseJSON", function(){
|
||||||
|
@ -672,24 +672,6 @@ test( "append HTML5 sectioning elements (Bug #6485)", function() {
|
|||||||
equal( aside.length, 1, "HTML5 elements do not collapse their children" );
|
equal( aside.length, 1, "HTML5 elements do not collapse their children" );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( "jQuery.clean, #12392", function() {
|
|
||||||
|
|
||||||
expect( 6 );
|
|
||||||
|
|
||||||
var elems = jQuery.clean( [ "<div>test div</div>", "<p>test p</p>" ] );
|
|
||||||
|
|
||||||
ok( elems[ 0 ].parentNode == null || elems[ 0 ].parentNode.nodeType === 11, "parentNode should be documentFragment or null" );
|
|
||||||
ok( elems[ 1 ].parentNode == null || elems[ 1 ].parentNode.nodeType === 11, "parentNode should be documentFragment or null" );
|
|
||||||
|
|
||||||
equal( elems[ 0 ].innerHTML, "test div", "Content should be preserved" );
|
|
||||||
equal( elems[ 1 ].innerHTML, "test p", "Content should be preserved" );
|
|
||||||
|
|
||||||
equal( jQuery.clean([ "<span><span>" ]).length, 1, "Incorrect html-strings should not break anything" );
|
|
||||||
|
|
||||||
elems = jQuery.clean([ "<td><td>" ]);
|
|
||||||
ok( elems[ 1 ].parentNode == null || elems[ 1 ].parentNode.nodeType === 11, "parentNode should be documentFragment or null" );
|
|
||||||
});
|
|
||||||
|
|
||||||
if ( jQuery.css ) {
|
if ( jQuery.css ) {
|
||||||
test( "HTML5 Elements inherit styles from style rules (Bug #10501)", function() {
|
test( "HTML5 Elements inherit styles from style rules (Bug #10501)", function() {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user