在.find()中定位找到的元素

时间:2015-03-12 10:45:32

标签: javascript jquery

我需要在克隆的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);
}

3 个答案:

答案 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/