gpt4 book ai didi

javascript - 如何替换 jQuery $.trim()?

转载 作者:行者123 更新时间:2023-11-30 14:12:21 27 4
gpt4 key购买 nike

我在一个网站中使用 jQuery,该网站具有用于内置 String.trim() 的 polyfill。站点过去经常在 IE 8 中运行并且需要 polyfill,但现在不需要了。不幸的是,我无法从页面中删除 polyfill——我没有权限去触摸它,我也没有办法删除它——所以这段代码先于任何东西运行我可以控制:

String.prototype.trim = function() {
return this.replace(/^\s\s*/, "").replace(/\s\s*$/, "")
}

然后 jQuery 出现并执行此操作,没有意识到原生 String.trim 已经搞砸了:

// Use native String.trim function wherever possible
trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
function( text ) {
return text == null ?
"" :
core_trim.call( text );
} :

// Otherwise use our own trimming functionality
function( text ) {
return text == null ?
"" :
( text + "" ).replace( rtrim, "" );
},

到目前为止,这并不是什么大问题,但我正在使用 Datatables plugin对于 jQuery,它有很多地方可以在非字符串数据(如数字或数组)上调用 $.trim()。 IE 11 和 Chrome(我们的目标浏览器)中的 native 代码知道只返回 $.trim(6) 的值,但 polyfill 不会。

我尝试用一​​个应该有效的函数重新定义原型(prototype):

String.prototype.trim = function(){
if(typeof this.valueOf(this) === 'string'){
return this.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
} else {
return this.valueOf(this);
}
}

但这并没有奏效,因为 jQuery 已经使用 polyfill 进行了扩展,并且对原型(prototype)的进一步更改不会改变 jQuery 使用的内容。

我尝试关注 this thread重新定义 $.trim(),但这没有用。

有没有办法将 String.prototype.trim() 返回到它的本地代码?

有没有办法重新定义$.trim()?

我没有想到的其他想法?

最佳答案

你可以覆盖 jQuery 核心方法

(function(){
var string = " TRIM ME ";
console.log(jQuery.trim(string));
// Define overriding method.
jQuery.trim = function(string){
return string;
}
console.log(jQuery.trim(string));
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

关于javascript - 如何替换 jQuery $.trim()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54191358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com