clone.find('[id]').each(function() {
id = $(this).attr('id');
ind = id.search(/\d+$/);
$(this).attr('id', id.substr(0,ind)+id_counter);
});
clone.find('[for]').each(function() {
id = $(this).attr('for');
ind = id.search(/\d+$/);
$(this).attr('for', id.substr(0,ind)+id_counter);
});
我知道我可以找到具有id
属性或 for
属性的元素,但是我怎么知道我需要设置哪一个?
答案 0 :(得分:3)
var list = ['id', 'for']
for (var i in list) {
var v = list[i];
clone.find('[' + v + ']').each(function() {
id = $(this).attr(v);
ind = id.search(/\d+$/);
$(this).attr(v, id.substr(0,ind)+id_counter);
});
}
delete list;
答案 1 :(得分:3)
如果你要做的就是减少代码,你可以......
function doTheseThings(element) {
clone.find(element).each(function() {
var id = $(this).attr('id');
var ind = id.search(/\d+$/);
$(this).attr('id', id.substr(0,ind)+id_counter);
});
}
doTheseThings('[id]');
doTheseThings('[for]');
更好:
我决定用@ SHiNKiROU的一些想法将我的第一个答案融合在一起,并添加一些Jquery-ish语法:
var items = ['[id]', '[for]'];
$.each(items, function (index, element) {
clone.find(element).each(function() {
var id = $(this).attr('id');
var ind = id.search(/\d+$/);
$(this).attr('id', id.substr(0,ind)+id_counter);
});
});
答案 2 :(得分:1)
好吧,重新审核的原因在于相同的代码适用于不同的属性,因此您需要考虑这些因素:
$.each(['id', 'for'], function (ignr, attr) {
clone.find('['+attr+']').each(function() {
val = $(this).attr(attr);
ind = val.search(/\d+$/);
$(this).attr(attr, val.substr(0,ind)+id_counter);
});
});
然后,如果你愿意,你可以删除一个局部变量来缩短它,但我不确定这是一个改进:
$.each(['id', 'for'], function (ignr, attr) {
clone.find('['+attr+']').each(function() {
val = $(this).attr(attr);
$(this).attr(attr, val.substr(0,val.search(/\d+$/))+id_counter);
});
});