我试图通过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的新手我不知道如何解决这个问题......
期待了解这一点:)
提前致谢!
答案 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) );
}