jQuery:如何删除此代码冗余?

时间:2010-04-11 20:24:03

标签: javascript jquery

    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属性的元素,但是我怎么知道我需要设置哪一个?

3 个答案:

答案 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);
  });
});