升级到jQuery 3.6.1遇见的一些坑以及应对办法
( function() {
/**
* 注意,以下代码,应确保 引用在 jquery 3.6.1, jquery-migrate-3.4.0.min.js,以及 jquery-ui-1.8.10.custom.min.js 等内容之后,否则
* 相关的 代码托管 可能会被取代 而 无效。
*/
jQuery.curCSS = function(element, prop, val) {
return jQuery(element).css(prop, val);
};
/**
* James add on 2022.11.24 , 相关代码摘录自 jquery 1.7.2
* 此 修复是为了 兼容 以下有关写法,在 append 到 jquery 对象里时,能适应 老版本的渲染逻辑。
* $.append("
* 上述内容,在 jquery 1.7.2 版本里,会被渲染为:
*
*
* 而在 jquery 3.6.1 里,则会被渲染为:
*
*
* 这是由于 在 旧版 jquery 里,针对 非闭合的标签有过特定处理,而在 jquery 3.6.1 里则移除了这个做法。
* 因此直接在 element 的 innterHtml 里面写入
* 与 3.6.1 里面是一致的。
*
* 所以根本上是不规范的 html 写法,只是老版本 jquery 做了容错,而新版本没有容错,因而导致问题。
*
*/
var oldAppend = jQuery.fn.append;
jQuery.fn.append =function( ) {
/**
* 相关素材来自 jquery 1.7.2
*/
var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([w:]+)[^>]*)/>/ig;
if (arguments.length > 0
&& typeof(arguments[0]) == "string" ) {
var elem = arguments[0];
elem = elem.replace(rxhtmlTag, "<$1>$2>");
arguments[0] = elem;
}
return oldAppend.apply( this, arguments );
};
var oldOuterWidth = jQuery.fn.outerWidth;
jQuery.fn.outerWidth =function( ) {
if (arguments.length <= 0) {
arguments[0] = false;
arguments.length = 1;
}
var result = oldOuterWidth.apply( this, arguments ) ;
return result === undefined ? 0 : result;
};
var oldOuterHeight = jQuery.fn.outerHeight;
jQuery.fn.outerHeight =function( ) {
if (arguments.length <= 0) {
arguments[0] = false;
arguments.length = 1;
}
var result = oldOuterHeight.apply( this, arguments );
return result === undefined ? 0 : result;
};
})();