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() 步骤的 'master' 函数会有帮助吗?
期待了解这一点:)
提前致谢!
你在外部化你的函数时犯了一个小错误。对 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) );
}
我正在尝试通过 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() 步骤的 'master' 函数会有帮助吗?
期待了解这一点:)
提前致谢!
你在外部化你的函数时犯了一个小错误。对 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) );
}