我有一个for循环来过滤一些表:
for(columnIndex = 1; columnIndex <= contentColumnsNumber; columnIndex++) {
$clonedTable = $table.clone();
$clonedTable.find('th, td').filter(function() {
if($(this).index() === 0 || $(this).index() === columnIndex) {
return false;
}
return true;
}).remove();
$clonedTable.appendTo($mobileTablesWrap);
}
JSLint建议不要在循环中创建函数: http://eslint.org/docs/rules/no-loop-func
因此,我想重构这段代码。所以我创建了另一个方法并调用它们,而不是内联函数:
function getRemovableCells(index, element, columnIndex) {
if($(this).index() === 0 || $(this).index() === columnIndex) {
return false;
}
return true;
}
function filterTable() {
[...]
for(columnIndex = 1; columnIndex <= contentColumnsNumber; columnIndex++) {
$clonedTable = $table.clone();
$clonedTable.find('th, td').filter(getRemovableCells).remove();
$clonedTable.appendTo($mobileTablesWrap);
}
}
现在,我的问题是获得columnIndex
的值。该值由循环提供,我需要将它们传递给过滤器函数。 filter函数已经有两个名为index
和element
的参数:
http://api.jquery.com/filter/#filter-function
所以我试图在循环中传递变量,但随后,上下文将被更改。我只是覆盖了现有的论点和this
。
$clonedTable.find('th, td').filter(getRemovableCells(columnIndex)).remove();
同样bind
或call
/ apply
也无法帮助我。