2009年5月7日 星期四

[引用] jQuery cache 之內部運作

來源
之前寫了一個自動增列元件,點到最後一列時會自動產生新的一列,套用了 jQuery 之後,發現既有的欄位都有生效,但新增一列出來的欄位就沒生效,我嘗試在新增一列後,重新執行一次 jQuery 的 API (bind 方法),但仍然無效。

經 追蹤 jQuery 的 source 後,我發現只要有被 jQuery "碰過"的 element ,都會加上 jQuery1200220xxx ="xx" 的屬性,應該是 jQuery 為了加快第二次 access 該 element 的速度所留下的"痕跡",而我的自動增列因為是複製最後一列的所有 html 產生新的 element,當然這個 jQuery 留下的 "痕跡" 也會被一併複製,所以新產生出來的 element 仍然擁有舊的 jQuery ID,雖然有重新執行 JQuery 的 API (其實是要 bind 一些方法),但 JQuery 發現在 cache 中已存在該 ID 了時就會自動 skip 掉,所以新列就完全沒 bind 到任何方法。
解決方法:
過濾新列的 html ,將 JQuery 的 ID 殺掉,如下:


var expr=/jQuery\d+=(\"|\')?\d+(\"|\')?/g ;
return s.replace(expr,"");

這樣就會將 jQuery1239298329="23" 這類的 ID 去掉了。

加了這行後,一切正常了 ! 又多解了 JQuery 啦~

【下列文章您可能也有興趣】

沒有留言: