3

我有以下脚本:

<script ... jquery-1.9.1.js"></script>
<script ... dataTables.js"></script>    
<script ... columnFilter.js"></script>

columnFilter.js 中存在以下代码:

(function ($) {

   $.fn.columnFilter = function (options) {
       //some code...

       function _fnCreateCheckbox(oTable, aData) {
           //some code...
       }

   };

})(jQuery);

我想做的是function _fnCreateCheckbox(oTable, aData)用我自己的代码覆盖。我对 javascript 相当陌生,所以会很感激一个例子。

我试过简单地抓取上面的代码并将其添加到它自己的<script>标签中,但这不起作用。它完全阻止了 columnFilter.js 的工作(我猜这是预期的)。不太确定还能尝试什么。

4

3 回答 3

8
function _fnCreateCheckbox(oTable, aData) {

仅存在于创建它的范围内,因为它创建(function ($) {了一个函数范围。你必须在那里编辑它。您不能在函数之外覆盖它。

编辑:在相关说明

如果您对 JS 很狡猾,并且您只是有时试图让该函数执行其他操作,您可以将一些额外的变量传递给您的 columnFilter 插件/函数调用,并在该函数中处理它们以执行其他操作。我不知道什么是列过滤器,但让我们假装在这样的元素上调用它:

el.columnFilter({optionA: true, optionB: false});

如果您想根据您可以做的一些数据做其他事情,

el.columnFilter({optionA: true, optionB: false, extraOption: true});

然后在你的脚本中,取决于你的整个脚本做什么:

$.fn.columnFilter = function (options) {
   //some code...
   if(options.extraOption){
       function _fnCreateCheckbox(oTable, aData) {
           //some default code...
       }
   } else {
       function _fnCreateCheckbox(oTable, aData) {
           //my other code...
       }
   }
};

这是一个粗略的示例,但只是为了显示您的选项。

于 2013-03-08T17:12:20.390 回答
2

我想你columnFilter.js从一些外部来源导入文件。

一种选择是将columnFilter.js文件复制到项目目录,随意修改,然后从项目目录中导入

于 2013-03-08T17:13:04.290 回答
1

您可以通过重新分配其原型来覆盖函数。但通常建议不要这样做。

var d = new Date();

alert(d.getFullYear()); // 2013

Date.prototype.getFullYear = function() { return "Full Year"; }

alert(d.getFullYear()); // "Full Year"

http://jsfiddle.net/js5YS/

于 2013-03-08T17:15:11.920 回答