我想为所有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"));
});
答案 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];
}
}
}