jQuery 循环内的 .attr() 函数

jQuery .attr() function within loop

我正在尝试通过 jQuery 动态替换属性 – 在我的 for 循环中我正在使用 .attr()-function 并且它工作正常但 JSLint 抱怨:

Don't make functions within a loop.

我知道我可以在 JSLint 配置中禁用这些特定测试,但我想了解如何通过在循环外放置一个相应的函数并在使用 .attr()[=15 时相应地调用该函数来解决这个问题=]

老逻辑

for (var i = currentRowIndex + 1; i <= oldIndex; i++) {

  [...]

  selectorName.attr( 'name', function( index, name ) {
    return name.replace( /\d+/g, newIndex );
  } );
}

所需逻辑

var replaceAttr = function( index, attr ) {
  return attr.replace( /\d+/g, index );
};

for (var i = currentRowIndex + 1; i <= oldIndex; i++) {

  [...]

  selectorName.attr( 'name', replaceAttr( function( newIndex, name ) );
}

问题

虽然第一个代码运行良好并且正确定位/传递名称属性,但第二个代码只是替换了一个空属性。我对 JS 还是很陌生,我不确定如何解决这个问题...

期待了解这一点:)

提前致谢!

你在外部化你的函数时犯了一个小错误。对 attr 的调用可以接受一个函数,但这意味着 你的 函数需要 return 一个函数——这通常被称为闭包。

var replaceAttr = function(newIndex){
 return  function( index, attr ) {
   return attr.replace( /\d+/g, newIndex );
 }
}

for (var i = currentRowIndex + 1; i <= oldIndex; i++) {

  [...]

  selectorName.attr( 'name', replaceAttr(newIndex) );
}