如何提高jquery的性能或使用常规替换?

时间:2011-06-07 12:32:27

标签: javascript jquery

我想为所有DOM元素的几个属性添加前缀id。

最好的方法是什么?

我发现了jquery的发现,每个函数都很慢。 我应该定期更换吗?

jquery的代码例如:

$("body").find("id").each(function(){
    $(this).attr("id", "AAA_" + $(this).attr("id"));
});

$("body").find("label[for]").each(function(){
    $(this).attr("for", "AAA_" + $(this).attr("for"));
});

3 个答案:

答案 0 :(得分:3)

首先,您要查找id元素,而不是id属性的元素。请改用[id]

其次,使用attr的回调参数:

$('[id]').attr('id', function(idx, oldId) {
    return 'AAA_' + oldId;
});
$('label[for]').attr('for', function(idx, oldFor) {
    return 'AAA_' + oldFor;
});

答案 1 :(得分:0)

我会将您的选择器更改为(我假设只有输入)并在一个循环中完成所有操作

$('input').each(function(){
    var cur_id = this.id;
    $('label[for:="'+cur_id +'"]').attr('for',"AAA_" + cur_id  );
    cur_id  = "AAA_" + cur_id ;
});

答案 2 :(得分:0)

您确实要修改HTML属性值,还是要修改DOM属性?我怀疑你真的想要处理DOM属性。

如果该属性的值不是空字符串,则以下内容将为指定的DOM属性添加前缀。注意,一些属性是布尔值,添加字符串前缀可能会产生异常结果。

我有兴趣知道这比jQuery快多少。

function prefixProperty(prop, prefix) {
  var el, els = document.getElementsByTagName('*');
  var i = els.length;

  while (i--) {
    el = els[i];

    // Only modify property if it has a value other than empty string
    if (el[prop].length) {
      el[prop] = prefix + el[prop];
    }
  }
}