原生JS實(shí)現(xiàn)幾個(gè)常用HTML DOM增強(qiáng)API

引言:HTML DOM提供了諸如 getElementsByTagName() getElementsByName() getElementById() createElement() appendChild() removeChild() replaceChild() insertBefore() createTextNode() 的方法,然而在實(shí)際工作中,特別是在不引入jQuery等第三方庫的情況下,我們還需要getElementsByClass() insertAfter 等方法,所以把平時(shí)積累的幾個(gè)方法整理出來。


  • getElementsByClassName()

<pre>
<code>
/**

  • 獲取指定類名的元素對象集合

  • @param {Object} node 父節(jié)點(diǎn)

  • @param {String} classname 指定類名

  • @return {[Object]}目標(biāo)對象集合
    /
    function getElementsByClassName(node,classname) {
    //如果瀏覽器支持則直接使用
    if (node.getElementsByClassName) {
    return node.getElementsByClassName(classname);
    } else {
    return (function getElementsByClass(searchClass,node) {
    if ( node == null )
    node = document;
    var classElements = [],
    els = node.getElementsByTagName("
    "),
    elsLen = els.length,
    pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)"), i, j;

      for (i = 0, j = 0; i &#60; elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
      }
      return classElements;
    

    })(classname, node);
    }
    }
    </code>
    </pre>

  • addLoadEvent()

<pre>
<code>
/**

  • 方便的將在文檔加載后運(yùn)行的函數(shù)添加到window.onload中
  • @param {function} func 待運(yùn)行函數(shù)
    */
    function addLoadEvent(func){
    var oldOnload = window.onload;
    //typeof 返回String類型
    if(typeof window.onload != 'function'){
    window.onload = func;
    }else{
    window.onload = function(){
    oldOnload();
    func();
    }
    }
    }
    </code>
    </pre>
  • addClass()

<pre>
<code>
/**

  • 為指定元素結(jié)點(diǎn)添加新類名
  • @param {Object} element 元素結(jié)點(diǎn)
  • @param {String} value 類名
    */
    function addClass(element,value){
    if(!element.className){
    element.className = value;
    }else{
    newClassName = element.className;
    //多個(gè)類名間添加空格
    newClassName += ' ';
    newClassName += value;
    element.className = newClassName;
    }
    }
    </code>
    </pre>
  • insertAfter()

<pre>
<code>
/**

  • 在目標(biāo)元素結(jié)點(diǎn)后面插入新的元素結(jié)點(diǎn)
  • @param {Object} newElement 待插入的新元素結(jié)點(diǎn)
  • @param {Object} targetElement 目標(biāo)元素結(jié)點(diǎn)
    */
    function insertAfter(newElement,targetElement){
    var parent = targetElement.parentNode;
    if(parent.lastChild == targetElement){
    parent.appendChild(newElement);
    }else{
    parent.insertBefore(newElement,targetElement.nextSibling);
    }
    }
    </code>
    </pre>
  • getNextElement()

<pre>
<code>
/**

  • 獲取下一個(gè)元素結(jié)點(diǎn)
  • @param {Object} node 兄結(jié)點(diǎn)
  • @return {Object || null}下一個(gè)元素結(jié)點(diǎn)或未獲取到
    */
    function getNextElement(node){
    var sibNode = node.nextSibling;
    if (sibNode.nodeType == 1) {
    return node;
    }
    if (sibNode.nextSibling) {
    //遞歸調(diào)用
    return getNextElement(node.nextSibling);
    }
    return null;
    }
    </code>
    </pre>

備注: HTML結(jié)點(diǎn)分為『元素結(jié)點(diǎn)』如<p> <li>、『屬性結(jié)點(diǎn)』如id``title、『文本結(jié)點(diǎn)』指包含在元素結(jié)點(diǎn)內(nèi)部的文本。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是DOM??? DOM(Document Object Model 文檔對象模型)是針對HTML和XML文檔的...
    熒惑3_3閱讀 1,562評論 0 1
  • Node類型 DOM1級(jí)定義了一個(gè)Node接口,該接口由DOM中所有節(jié)點(diǎn)類型實(shí)現(xiàn)。這個(gè)Node接口在JS中是作為N...
    Maggie_77閱讀 464評論 0 0
  • 認(rèn)識(shí)DOM文檔對象模型DOM(Document Object Model)定義訪問和處理HTML文檔的標(biāo)準(zhǔn)方法。D...
    jasmine_jing閱讀 861評論 0 3
  • 假設(shè)我們正面對某些麻煩,工作中的也好,人際關(guān)系中的也好,如果我們眼中所見的只有麻煩,可能會(huì)覺得天都塌下來了。 可是...
    sunny視界閱讀 646評論 2 8
  • 花開,花飛,花落或許就是一朵花的一生。我愛花,愛她的剎那芳華;愛她的香遠(yuǎn)益清;愛她的不可方物。美麗的事物總是受人們...
    子勿語閱讀 336評論 0 0

友情鏈接更多精彩內(nèi)容