jQuery 插件 - 在变量上调用插件方法
jQuery Plugins - Call plugin method on a variable
我正在尝试开发一个非常基本的 jquery 插件,它使用 toLocaleString 方法将数字格式化为语言环境字符串,这样我就可以在我的脚本中重复调用我自己的数字方法,但是我似乎根本无法让它工作,而且它总是 returns 数字未定义。
JSFiddle:https://jsfiddle.net/wuwgtpt3/2/.
JS:
$.fn.formatCommas = function() {
parseFloat(this).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
})
}
var number = 1000000;
//attempt 1
var formatted = $.formatCommas(number);
//attempt 2
var formatted = $(number).formatCommas();
console.log('formatted number: ' + formatted);
$('#number').val(number);
$('#formatted').val(formatted);
通过使用 $.fn.formatCommas
您可以创建 jQuery 对象的原型方法。那么就需要这样使用
$('div').formatCommas() // or other selector, etc.
这显然不是您的目的所需要的,因为 .
您要做的是创建简单的静态方法:
$.formatCommas = function(str) {
parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
})
}
但是,老实说,您正在实现的功能最好是项目实用程序的一部分 module/functions,这不应该是您的 jQuery 代码的一部分。
这是您可以在您的案例中使用的代码原型(我没有测试但必须工作):
// ATTEMPT 1
(function ($){
$.formatCommas = function(str){
return parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
});
}(jQuery));
// ATTEMPT 2
// To avoid some problem if many library are declared
(function ($){
// method augmentation
$.fn.formatCommas = function() {
var str = this.val();
str = parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
this.val(str);
// to permit continue method call after this one !
return this;
};
}(jQuery));
// ATTEMPT MERGE
(function ($){
$.formatCommas = function(str){
return parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
});
$.fn.formatCommas = function() {
var str = this.val();
str = $.formatCommas(str);
this.val(str);
return this;
};
}(jQuery));
试试,我已经测试过了:
JSFiddle:https://jsfiddle.net/pvviana/42jcdzz4/
$.fn.formatCommas = function(str){
return parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
var number = 1000000;
//attempt 1
var formatted = $.fn.formatCommas(number);
console.log('formatted number: ' + formatted);
$('#number').val(number);
$('#formatted').val(formatted);
我正在尝试开发一个非常基本的 jquery 插件,它使用 toLocaleString 方法将数字格式化为语言环境字符串,这样我就可以在我的脚本中重复调用我自己的数字方法,但是我似乎根本无法让它工作,而且它总是 returns 数字未定义。
JSFiddle:https://jsfiddle.net/wuwgtpt3/2/.
JS:
$.fn.formatCommas = function() {
parseFloat(this).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
})
}
var number = 1000000;
//attempt 1
var formatted = $.formatCommas(number);
//attempt 2
var formatted = $(number).formatCommas();
console.log('formatted number: ' + formatted);
$('#number').val(number);
$('#formatted').val(formatted);
通过使用 $.fn.formatCommas
您可以创建 jQuery 对象的原型方法。那么就需要这样使用
$('div').formatCommas() // or other selector, etc.
这显然不是您的目的所需要的,因为 .
您要做的是创建简单的静态方法:
$.formatCommas = function(str) {
parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
})
}
但是,老实说,您正在实现的功能最好是项目实用程序的一部分 module/functions,这不应该是您的 jQuery 代码的一部分。
这是您可以在您的案例中使用的代码原型(我没有测试但必须工作):
// ATTEMPT 1
(function ($){
$.formatCommas = function(str){
return parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
});
}(jQuery));
// ATTEMPT 2
// To avoid some problem if many library are declared
(function ($){
// method augmentation
$.fn.formatCommas = function() {
var str = this.val();
str = parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
this.val(str);
// to permit continue method call after this one !
return this;
};
}(jQuery));
// ATTEMPT MERGE
(function ($){
$.formatCommas = function(str){
return parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
});
$.fn.formatCommas = function() {
var str = this.val();
str = $.formatCommas(str);
this.val(str);
return this;
};
}(jQuery));
试试,我已经测试过了:
JSFiddle:https://jsfiddle.net/pvviana/42jcdzz4/
$.fn.formatCommas = function(str){
return parseFloat(str).toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
var number = 1000000;
//attempt 1
var formatted = $.fn.formatCommas(number);
console.log('formatted number: ' + formatted);
$('#number').val(number);
$('#formatted').val(formatted);