循环

时间:2017-05-24 10:13:12

标签: javascript jquery jslint

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

  

不要在循环中创建函数。

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

旧逻辑

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 ) );
}

问题

虽然第一个工作正常并且目标/正确传递了name-attribute,但第二个代码只是替换了一个空属性。仍然是JS的新手我不知道如何解决这个问题......

  • 关闭有问题吗?
  • 如何传递/设置目标以便识别它而不仅仅是字符串?
  • 会创建一个包含.attr() - 步骤帮助的'master'功能吗?

期待了解这一点:)

提前致谢!

1 个答案:

答案 0 :(得分:1)

您在设置外部功能时出现了轻微错误。对attr的调用可以采用一个函数,但这意味着你的函数需要返回一个函数 - 这通常被称为闭包。

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) );
}