亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

章節
問答
課簽
筆記
評論
占位
占位

移除

涉及節點刪除的接口jQuery劃分了四個分別是detach,empty,remove,unwrap,因為使用的范圍不同,所以功能有所差異,但是總的來說都是用來清理節點的。

innerText是我們常用的文本清理方法,但是火狐下不兼容,不過會提供一個類似的方法叫textContent。

兩者還是有一些區別的,總結如下。

IE中的innerText是需要對innerHTML的值進行:

  1.  HTML轉義(等同于XML轉義,對<、&等轉義字符進行處理);
  2.  經過HTML解釋和CSS樣式解釋;
  3.  之后又剔除格式信息;
  4.  之后留下的純文本。

而FF中的textContent沒有2、3步,在經過了HTML轉義之后直接剔除所有html標簽后得到的純文本,我們在接著看下就jQuery對節點清除的具體封裝。

.empty()

從DOM中移除集合中匹配元素的所有子節點,為了避免內存泄漏,jQuery先移除子元素的數據和事件處理函數,然后移除子元素。

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方法,清除節點不單單只有元素,還有附加在上面的事件處理與數據緩存。

jQuery.cleanData方法,就是通過元素判斷上綁定的expando的這個uuid在與之對應的cache中找到數據與事件句柄加以刪除。

.remove()

.remove() 將元素移出DOM,當我們想將元素自身移除時我們用 .remove(),同時也會移除元素內部的一切,包括綁定的事件及與該元素相關的jQuery數據。

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的加強版,把本身的父節點也清除掉了。因為remove支持過濾器所以支持傳遞selecor。remove需要刪除自身及其所有的子元素包括事件與數據,所以要通過找到父節點parnetNode移除。

.detach()

如果你想刪除元素,不破壞他們的數據或事件處理程序(這些綁定的信息還可以在之后被重新添加回來)。.detach() 方法和.remove()一樣, 除了 .detach()保存所有jQuery數據和被移走的元素相關聯。當需要移走一個元素,不久又將該元素插入DOM時,這種方法很有用。

detach: function(selector) {
      return this.remove(selector, true);
 }

這個方法也很簡單,意味著這要暫時移除節點,但是不銷毀對應的事件與數據,在remove方法中支持傳遞布爾值用來處理這個cleanData的過濾。

任務

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

  • · 粉絲專屬優惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關注公眾號
關注后,及時獲悉本課程動態

舉報

0/150
提交
取消
全部 精華 我要發布
全部 我要發布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?