手がかりのツールチップがアタッチされているアンカーを動的に削除および追加するWebアプリのメモリリークを追跡してきましたが、手がかりのツールチップをノードに接続する手がかりのメインクロージャーに問題を絞り込んだ可能性があります(32行目)。 :var link = this、$ this = $(this);)。
私はSIEVで次のスクリプトを実行しており、jquery 1.3.2の修正バージョンを使用して、手がかり要素を削除できるようにする次の修正を加えています。ただし、手がかりノードが削除された後もアンカーノードへの参照が1つあるため、アンカーノードは孤立しますか?
テスト目的で、手がかりのソースの32行目を次のように変更した場合:var link = $('br')、$ this = $('br');
アンカーは解放されますが、「br」ノードが構築され始めます。
したがって、この問題を回避する方法を誰かが知っているかどうか疑問に思いましたか?または、単にリソースを正しく解放していない場合はどうなりますか?
添付のスクリプトとソース:
jQueryの変更。1247行目以降、中括弧を閉じる前に次を挿入します(http://markmail.org/message/cfi4bvfjc3m6ww6k#query:jquery%20memory%20leak%20in%20remove%20and%20empty+page:1+mid:tapc7zt3cwl6rw4f+state:結果):
this.outerHTML = "";
スクリプト例:
<html>
<head>
<link rel="stylesheet" type="text/css" href="jquery.cluetip.css"/>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript" src="jquery.cluetip.js"></script>
<script type="text/javascript">
$(document).ready(function() {
setInterval(resetCluetip, 1000);
});
function resetCluetip() {
$('a').each(function() {
$(this).cluetip('destroy');
$(this).unbind().remove();
});
$('#cluetip*').unbind().empty();
$('body').html('<a href="#" class="contextMenu" title="title|body">anchor one</a><br>');
$('a').each(function() {
$(this).cluetip({splitTitle: '|'});
});
}
</script>
</head>
<body>
</body>
</html>