DOM操作的增強版功能JS函數

jopen 9年前發布 | 892 次閱讀 JavaScript

/**

  • 將一個DOM節點、HTML字符串混合型參數
  • 轉化為原生的DOM節點數組 *
  • */ function checkElem(a) { var r = [];

    if (a.constructor != Array) {

     //如果不是參數數組,則強行轉換
     a = [a];
    

    }

    for (var i = 0; i < a.length; i++) {

     //如果是字符串,例如"<li>aa</li>"
     if (a[i].constructor == String) {
         //使用一個臨時元素來存放HTML
         var div = document.createElement("div");
         //注入HTML,轉換成DOM結構
         div.innerHTML = a[i];
    
         for (var j = 0; j < div.childNodes.length; j++) {
             r[r.length] = div.childNodes[j];
         }
    
     } else if (a[i].length) {
         //假定是DOM節點數組
         for (var j = 0; j < a[i].length; j++) {
             r[r.length] = a[i][j];
         }
     } else {
         //DOM節點
         r[r.length] = a[i];
     }
    

    }

    return r; }

/**

  • 在parent執行環境下,在before元素下前面添加elem元素
  • */ function before(parent, before, elem) { //檢查是否提供parent節點參數 if (elem == null) {

     elem = before;
     before = parent;
     parent = before.parentNode;
    

    } //獲取元素的新數組 var elems = checkElem(elem);

    /**

    • 向后遍歷數組,
    • 因為我們向前插入元素
    • */ for (var i = elems.length - 1; i >= 0; i--) { parent.insertBefore(elem[i], before); }

} /**

  • 為parent追加一個子元素的輔助函數 *
  • */ function append(parent, elem) { var elems = checkElem(elem);

    for(var i = 0; i <= elems.length; i++){

     parent.appendChild(elems[i]);
    

    } } /**

  • 刪除elem節點函數 *
  • */ function remove(elem) { if(elem) {
     elem.parentNode.removeChild(elem);
    
    } } /**
  • 從一個元素中刪除所有子節點的函數 *
  • */ function empty(elem) { while(elem.firstChild) {
     remove(elem.firstChild);
    
    } }</pre>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!