我需要在克隆的html元素上替换许多name和id属性,并编写一个简单的替换函数来替换属性字符串中的所有数字。
我使用.find在div中查找元素,然后使用.attr()替换名称或id,但我想将找到的元素用作$(this)或其他任何内容。
那么如何通过调用.find()?
来定位我找到的元素这就是我想要使用的东西或类似的东西
newField.find('input[type="hidden"]').attr('name', replaceNumbersinStringTo($(this).attr('name'), index+1));
问题在于$(this)在这种情况下不包含隐藏的输入。
替换功能
function replaceNumbersinStringTo(string, replaceTo)
{
return string.replace(/\d+/g,replaceTo);
}
答案 0 :(得分:1)
问题在于使用this
。函数调用中的this
引用代码所在的函数的上下文,而不是newField
元素。
newField.find('input[type="hidden"]').attr('name', function (i, name) {
return replaceNumbersinStringTo(name, index + 1)
});
或
newField.find('input[type="hidden"]').attr('name', replaceNumbersinStringTo(newField.attr('name'), index+1));
答案 1 :(得分:1)
解决此问题的最简单方法是在变量中声明找到的元素。
var found = newField.find('input[type="hidden"]');
found.attr('name', replaceNumbersinStringTo(found.attr('name'), index+1));
这基本上取代了你的$(this)
函数,这也意味着你可以在找到的对象上做更多的事情而不要求jQuery创建并返回一个新的jQuery对象。
答案 2 :(得分:1)
newField.find('input[type="hidden"]').each(function(i){
$(this).attr('name', replaceNumbersinStringTo($(this).attr('name'), i+1);
});
我不确定您在我的示例中如何使用“index”或i,因此可能需要稍微修改以满足您的需求。
或者我会说如果您要进行大量的克隆操作,请考虑使用模板和渲染元素。您基本上可以将令牌放入名称属性所在的模板中,然后在呈现模板时传递适当的值。例如:http://handlebarsjs.com/