jQuery清空標簽內容--防止內存泄露


  寫jQuery代碼是,經常會做清空一個標簽內容的操作。那么你是怎么做的呢?比如

<div id="box">
    <p>星期一</p>
    <p>星期二</p>
    <p>星期三</p>
    <p>星期四</p>
    <p>星期五</p>
    <p>星期六</p>
    <p>星期天</p>
</div>

  我們要清除掉box中的所有元素。

  你可能會好不猶豫的寫下代碼:

$('#box').html('');

  首先必須承認,這么寫能實現清空box的效果。

  但是,這么寫不好。因為這么寫有可能會引起內存泄露。

  何謂內存泄露?就是你的程序由於某種原因,占用了過多的內存空間,並且,在你不需要使用這些內存空間之后,仍然無法釋放掉這些內存空間;當你由此占用的空間越來越多,達到一定程度后,就有可能引起程序崩潰;此所謂內存泄露。

  那問題來了,這個$obj.html('')方法為啥會引起內存泄露?(ps:這里的$obj表示一個jQuery對象)

  $obj.html('')只清空該對象的內部元素,但是不會清楚注冊在內部元素上的事件。

  比如上例中,如果div#box里的p標簽上還注冊有事件,那么這些事件代碼當然要占用內存。如果你使用$('#box').html('')來清空所有的p,那么box的內容確實被清空了,但是注冊在這些p標簽上的事件代碼並沒有被清理掉,這些事件代碼仍然保留在內存里,並且無法得到釋放。

  解決之道:使用empty()

$('#box').empty();

  empty()會清空一切,包括那些被清理掉的元素身上注冊的事件,這樣就防止發生內存泄露。

  ps:你可能會說,現在內存動不動都4G,8G,你要是因為這卡了,是你電腦太爛。你非要這么說,我也無話可說。不過話說回來了,有更好的,正確的,為啥不用呢?勿以善小而不為嘛

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM