我正在使用jQuery Lazy plugin来延迟加载JS和CSS资源。我也使用TableSorter jQuery plugin来使表格可排序。现在这两个工作没有问题,当我只是在Lazy插件中定义Tablesorter然后像这样使用Tablesorter:
$('#table_id').tablesorter();
以上内容按预期工作,按需加载Tablesorter库,HTML表格变为可排序。但是,我需要向tablesorter添加自定义解析器,如下所示:
$.tablesorter.addParser({
id: 'my_parser',
is: function(s) {
return false;
},
format: function(s) {
var result = s.match(/([0-9]+)/);
if (result == null) return 0;
return parseInt(result[0]);
},
type: 'numeric'
});
以上addParser代码的问题是,我得到错误“$ .tablesorter没有方法'addParser'”。如果已经加载了TableSorter插件,它就没有区别。懒惰插件用自己的函数覆盖$ .tablesorter,并且不允许这个调用之王 - 我猜想。
此behaviour can be seen here in this jsFiddle的示例。
任何人都可以帮助我吗?我非常感谢任何帮助或想法。提前谢谢。
答案 0 :(得分:2)
只是为了证明我的观点yepnope.js可以很容易地做你需要的事情(例如,如果周围有任何可排序的表格,则有条件地加载tablesorter插件):
$(function () {
yepnope({
test : $("table.sortable").length,
yep : "/resources/jquery.tablesorter.js",
complete: function () {
$.tablesorter.addParser({
// whatever;
});
$("table.sortable").tablesorter();
}
});
});
答案 1 :(得分:1)
您收到此错误是正常的。 Lazy插件的工作方式是为您在选项中提供的name
创建代理。
所以实际上$.tablesorter
是(在控制台中查看):
$.tablesorter:
function proxy() {
var self = this;
arg = arguments;
if( $.lazy.archive[src].status === 'loaded' ) {
$.each(this,function(){
$(this)[name].apply(self,arg);
});
} else if ( $.lazy.archive[src].status === 'loading' ) {
$.lazy.archive[src].que.push({'name':name,'self':self,'arguments':arg});
...
如果插件已加载到$.lazy.archive
,它会将其应用于您调用tablesorter()
的元素,否则它会首先加载该插件,然后对其进行操作。
因此,您没有插件通常提供的原始命名空间,在您的上下文中,您不能使用$.tablesorter.addParser
。