升级到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("

ttt
");

  * 上述内容,在 jquery 1.7.2 版本里,会被渲染为:

  *

ttt

  *

  * 而在 jquery 3.6.1 里,则会被渲染为:

  *

ttt

  *

  * 这是由于 在 旧版 jquery 里,针对 非闭合的标签有过特定处理,而在 jquery 3.6.1 里则移除了这个做法。

  * 因此直接在 element 的 innterHtml 里面写入

ttt
这个内容,

  * 与 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>");

  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;

  };

  })();