1. 程式人生 > >jQuery清空標簽內容--防止內存泄露

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,你要是因為這卡了,是你電腦太爛。你非要這麽說,我也無話可說。不過話說回來了,有更好的,正確的,為啥不用呢?勿以善小而不為嘛

  

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