涉及節(jié)點(diǎn)刪除的接口jQuery劃分了四個(gè)分別是detach,empty,remove,unwrap,因?yàn)槭褂玫姆秶煌?/span>所以功能有所差異,但是總的來說都是用來清理節(jié)點(diǎn)的。
innerText是我們常用的文本清理方法,但是火狐下不兼容,不過會(huì)提供一個(gè)類似的方法叫textContent。
兩者還是有一些區(qū)別的,總結(jié)如下。
IE中的innerText是需要對(duì)innerHTML的值進(jìn)行:
而FF中的textContent沒有2、3步,在經(jīng)過了HTML轉(zhuǎn)義之后直接剔除所有html標(biāo)簽后得到的純文本,我們在接著看下就jQuery對(duì)節(jié)點(diǎn)清除的具體封裝。
.empty()
從DOM中移除集合中匹配元素的所有子節(jié)點(diǎn),為了避免內(nèi)存泄漏,jQuery先移除子元素的數(shù)據(jù)和事件處理函數(shù),然后移除子元素。
empty: function() { var elem, i = 0; for (; (elem = this[i]) != null; i++) { if (elem.nodeType === 1) { jQuery.cleanData(getAll(elem, false)); elem.textContent = ""; } } return this; }
jQuery是合集元素,所以我們遍歷下this[i],然后直接把元素的textContent清空即可,但是需要注意jQuery.cleanData方法,清除節(jié)點(diǎn)不單單只有元素,還有附加在上面的事件處理與數(shù)據(jù)緩存。
jQuery.cleanData方法,就是通過元素判斷上綁定的expando的這個(gè)uuid在與之對(duì)應(yīng)的cache中找到數(shù)據(jù)與事件句柄加以刪除。
.remove()
.remove()
將元素移出DOM,當(dāng)我們想將元素自身移除時(shí)我們用 .remove()
,同時(shí)也會(huì)移除元素內(nèi)部的一切,包括綁定的事件及與該元素相關(guān)的jQuery數(shù)據(jù)。
remove: function(selector, keepData /* Internal Use Only */ ) { 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; }
remove是empty的加強(qiáng)版,把本身的父節(jié)點(diǎn)也清除掉了。因?yàn)閞emove支持過濾器所以支持傳遞selecor。remove需要?jiǎng)h除自身及其所有的子元素包括事件與數(shù)據(jù),所以要通過找到父節(jié)點(diǎn)parnetNode移除。
.detach()
如果你想刪除元素,不破壞他們的數(shù)據(jù)或事件處理程序(這些綁定的信息還可以在之后被重新添加回來)。.detach() 方法和.remove()一樣, 除了 .detach()保存所有jQuery數(shù)據(jù)和被移走的元素相關(guān)聯(lián)。當(dāng)需要移走一個(gè)元素,不久又將該元素插入DOM時(shí),這種方法很有用。
detach: function(selector) { return this.remove(selector, true); }
這個(gè)方法也很簡單,意味著這要暫時(shí)移除節(jié)點(diǎn),但是不銷毀對(duì)應(yīng)的事件與數(shù)據(jù),在remove方法中支持傳遞布爾值用來處理這個(gè)cleanData的過濾。
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)