Make sure that checked state is cloned properly. Based upon the patch by Michael, required better test cases and in doing so found more edge cases. Introduced a new check into jQuery.support as a result. Fixes #5929.
This commit is contained in:
parent
390186b902
commit
bed759c95c
3 changed files with 41 additions and 5 deletions
|
@ -5,6 +5,7 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
|
|||
rtagName = /<([\w:]+)/,
|
||||
rtbody = /<tbody/i,
|
||||
rhtml = /<|&\w+;/,
|
||||
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, // checked="checked" or checked (html5)
|
||||
fcloseTag = function( all, front, tag ) {
|
||||
return rselfClosing.test( tag ) ?
|
||||
all :
|
||||
|
@ -35,7 +36,7 @@ jQuery.fn.extend({
|
|||
if ( jQuery.isFunction(text) ) {
|
||||
return this.each(function(i) {
|
||||
var self = jQuery(this);
|
||||
return self.text( text.call(this, i, self.text()) );
|
||||
self.text( text.call(this, i, self.text()) );
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -251,11 +252,18 @@ jQuery.fn.extend({
|
|||
domManip: function( args, table, callback ) {
|
||||
var results, first, value = args[0], scripts = [];
|
||||
|
||||
// We can't cloneNode fragments that contain checked, in WebKit
|
||||
if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
|
||||
return this.each(function() {
|
||||
jQuery(this).domManip( args, table, callback, true );
|
||||
});
|
||||
}
|
||||
|
||||
if ( jQuery.isFunction(value) ) {
|
||||
return this.each(function(i) {
|
||||
var self = jQuery(this);
|
||||
args[0] = value.call(this, i, table ? self.html() : undefined);
|
||||
return self.domManip( args, table, callback );
|
||||
self.domManip( args, table, callback );
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -326,7 +334,8 @@ function cloneCopyEvent(orig, ret) {
|
|||
function buildFragment( args, nodes, scripts ) {
|
||||
var fragment, cacheable, cacheresults, doc;
|
||||
|
||||
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 ) {
|
||||
// webkit does not clone 'checked' attribute of radio inputs on cloneNode, so don't cache if string has a checked
|
||||
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
|
||||
cacheable = true;
|
||||
cacheresults = jQuery.fragments[ args[0] ];
|
||||
if ( cacheresults ) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue