2011-06-07 45 views
2

我想爲所有DOM元素的幾個屬性添加前綴id。如何提高jquery的性能或者使用常規替換?

什麼是最好的方法?

我發現jquery的find和每個函數都很慢。 應該使用常規替換嗎?

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

將'$(this)'放在變量中應該有所作爲。 – Kevin 2011-06-07 12:34:06

回答

3

首先,你要找的id元素,與id屬性不是元素。改爲使用[id]

其次,使用回調參數attr

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

我想你的選擇更改爲(我假設只有imputs),做這一切在一個循環

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

'$ this = this.id'令人困惑。我相信大多數人會希望'$ this'被定義爲'$ this = $(this)'。 'curId = this.id'怎麼樣呢? – 2011-06-07 12:48:04

+0

好主意謝謝,完成。 – mcgrailm 2011-06-07 12:51:16

+1

你還在引入混淆。將一個'$'前置到一個變量名的慣例是表明該變量存儲了一個jQuery對象。您不存儲jQuery對象,僅僅是對當前選定元素的id屬性的引用。 – 2011-06-07 12:59:40

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]; 
    } 
    } 
}