javascript - 關(guān)于jquery的remove()方法
問(wèn)題描述
這里不太明白,不會(huì)重jquery對(duì)象中刪除? 如果要?jiǎng)h除,怎么刪除呢?
問(wèn)題解答
回答1:關(guān)于 remove 我們看源碼是這樣的:摘自jquery2.x
// keepData is for internal use only--do not document remove: function( selector, keepData ) {var elem, elems = selector ? jQuery.filter( selector, this ) : this, i = 0;for ( ; (elem = elems[i]) != null; i++ ) { if ( !keepData && elem.nodeType === 1 ) {jQuery.cleanData( getAll( elem ) ); } if ( elem.parentNode ) {if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { setGlobalEval( getAll( elem, 'script' ) );}elem.parentNode.removeChild( elem ); }}return this; },
按照示例的代碼 $(’p’).remove()結(jié)合源碼所說(shuō),其實(shí)用的就是原生的removeChild
https://developer.mozilla.org...
而removeChild 這里MDN有個(gè)說(shuō)明:
被移除的這個(gè)子節(jié)點(diǎn)仍然存在于內(nèi)存中,只是沒(méi)有添加到當(dāng)前文檔的DOM樹(shù)中,因此,你還可以把這個(gè)節(jié)點(diǎn)重新添加回文檔中,當(dāng)然,實(shí)現(xiàn)要用另外一個(gè)變量比如上例中的oldChild來(lái)保存這個(gè)節(jié)點(diǎn)的引用. 如果使用上述語(yǔ)法中的第二種方法, 即沒(méi)有使用 oldChild 來(lái)保存對(duì)這個(gè)節(jié)點(diǎn)的引用, 則認(rèn)為被移除的節(jié)點(diǎn)已經(jīng)是無(wú)用的, 在短時(shí)間內(nèi)將會(huì)被內(nèi)存管理回收.
而題主標(biāo)注的 不會(huì)從jQuery對(duì)象中刪除,也一樣,題主可以在頁(yè)面隨便找一個(gè)jQuery dom看看,比如
var t = $(’#test’);t.remove();
這里t就是一個(gè)jQuery對(duì)象,包含了已經(jīng)remove掉的dom的信息。
正如上面引用mdn所說(shuō),如果你沒(méi)有用變量來(lái)保存已經(jīng)刪除的dom,那它就等著被回收掉了。
當(dāng)然可能覺(jué)得就像上面,還是用了t保存了dom的信息,并且在t[0]上,那可以試下 delete(t[0]) ?
= =我倒是 不知道咋測(cè)試那個(gè)dom到底被回收了沒(méi)。不過(guò)基本上remove了,也沒(méi)引用了 ,如果頁(yè)面dom不是很復(fù)雜的話,暫時(shí)可以忽略。 這個(gè)是我的見(jiàn)解,有不對(duì)的請(qǐng)指教哈~
相關(guān)文章:
1. MySQL數(shù)據(jù)庫(kù)中文亂碼的原因2. php - mysql連表統(tǒng)計(jì)查詢3. MySQL分表之后如何做排序的問(wèn)題4. mysql - 連續(xù)的24條sql語(yǔ)句,一條條查,還是union all好?5. mysql主從復(fù)制 REPLICATE_DO_DB 參數(shù)從服務(wù)器reboot后每次都回滾為初始設(shè)置6. MySQL不知道錯(cuò)哪里了?7. mysql事務(wù)日志的一些問(wèn)題8. Mysql存儲(chǔ)過(guò)程問(wèn)題9. 數(shù)據(jù)庫(kù) - mysql boolean型無(wú)法插入true10. phpstuty 修改完監(jiān)聽(tīng)端口,apache無(wú)法啟動(dòng)
