JS-NO.6

DOM中元素獲取的方式

  • id獲?。簐ar oDiv=document.getElementById('div1'); 注意,只能用document;
  • class獲?。篸ocument.getElementsByClassName('haha'); 可以限定范圍的獲取元素
  • tagName:可以限定范圍的獲取元素
  • querySelect
    • tag
    • '#'id
    • .class
  • querySelectAll; 注意,querySelectAll獲取到的是一組元素,即使是頁(yè)面中唯一的id,也得加[];

節(jié)點(diǎn)

|nodeType |nodeName | nodeValue|
---|---
文本節(jié)點(diǎn) | 3 | "#text" | 文本內(nèi)容
元素節(jié)點(diǎn) | 1|大寫的標(biāo)簽名| null
注釋節(jié)點(diǎn) | 8| #comment |注釋內(nèi)容
document節(jié)點(diǎn) | 9|#document| null

節(jié)點(diǎn)關(guān)系

  • children 子元素
    • 一般情況兼容,但是在IE7/8下,如果有注釋的話,拿到的是不準(zhǔn)確的;
  • childNodes 拿到所有的子節(jié)點(diǎn)
  • parentNode 父元素; 拿的是結(jié)構(gòu)上的父級(jí);
  • previousSibling 上一個(gè)哥哥節(jié)點(diǎn)
  • nextSibling 下一個(gè)弟弟節(jié)點(diǎn)

久久乘法表 + 擴(kuò)展

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圓夢(mèng)源:勿忘初心,方得始終</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        ul{
            padding:30px;
        }
        ul li{
            height: 50px;
            line-height: 50px;
            font-size: 30px;
        }
        .bg0{
            background: pink;
        }
        .bg1{
            background: lightcyan;
        }
        .bg2{
            background: lightgoldenrodyellow;
        }
        .change{
            background: purple;
            color: #ffffff;
        }
        ul li span{
            display: inline-block;
            width: 120px;
        }
    </style>
</head>
<body>
<ul></ul>
<script>
    (function () {
        var oUl=document.getElementsByTagName('ul')[0];
        var aLi=oUl.getElementsByTagName('li');
        var str='';
        var oldBg=null; //現(xiàn)在沒有,以后會(huì)有
        for(var i=1; i<=9; i++){
            str+='<li>'
            for(j=1; j<=i; j++){
                str+='<span>'+(j+'*'+i+'='+j*i)+'</span>'
            }
            str+='</li>'
        }
        oUl.innerHTML=str;

        //隔行換色,最簡(jiǎn)單的方法,就是%的思想;
        for(var i=0; i<aLi.length; i++){
            aLi[i].className='bg'+i%3;
            //自定義屬性思想:所有你將來要用到的數(shù)值,不知道存哪里,都可以存在元素的自定義屬性上;
            /*aLi[i].oldBg='bg'+i%3;//當(dāng)我們換完顏色的時(shí)候,就把每個(gè)li自身的顏色,存在自己的自定義屬性上;
             aLi[i].onmouseover=function () {
             this.className='change';
             };
             aLi[i].onmouseout=function () {
             //鼠標(biāo)移出的時(shí)候,就恢復(fù)以前的嚴(yán)格,以前的顏色在標(biāo)簽的自定義屬性oldBg上存的;
             this.className=this.oldBg;
             };*/
            //思路2:利用變量存值
            aLi[i].onmouseover=function () {
                oldBg=this.className;
                this.className='change';
            };
            aLi[i].onmouseout=function () {
                this.className=oldBg;
            }
        }

    })();
</script>
</body>
</html>

getChildren

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圓夢(mèng)源:勿忘初心,方得始終</title>
</head>
<body>
<!--為什么要封裝?要封裝他干什么?目的:1)為了獲取當(dāng)前容器下,所有的子元素 2)對(duì)子元素再做一個(gè)過濾-->
<div>
    <p></p>
    <p></p>
    <p></p>
    <span></span><span></span>
</div>
<script>
    var oDiv=document.getElementsByTagName('div')[0];
    var aP=getChildren(oDiv,'p');
    var aSpan=getChildren(oDiv,'span');
    var aChild=getChildren(oDiv);
    function getChildren(parent,tagName) {
        //1:拿到當(dāng)前容器下,所有的子節(jié)點(diǎn)
        var aChilds=parent.childNodes;
        //2:建立空數(shù)組,逐個(gè)遍歷每個(gè)節(jié)點(diǎn)進(jìn)行判斷
        var ary=[];
        for(var i=0; i<aChilds.length; i++){
            var cur=aChilds[i];
            if(cur.nodeType===1){
                /*if(typeof tagName==='undefined'){//說明沒傳第二個(gè)參數(shù),那我們獲取的就是所有子節(jié)點(diǎn)
                    ary.push(cur)
                }else{//傳了第二個(gè)參數(shù),需要比對(duì)標(biāo)簽名后再放入數(shù)組;
                    if(cur.tagName.toLowerCase()===tagName.toLowerCase()){
                        ary.push(cur);
                    }
                }*/
                tagName?cur.tagName.toLowerCase()===tagName.toLowerCase()&&ary.push(cur):ary.push(cur);
            }
        }
        return ary;
    }
</script>
</body>
</html>

previouseSbling

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圓夢(mèng)源:勿忘初心,方得始終</title>
</head>
<body>
<div class="wrap"><div>第1個(gè)div</div>
    111111
    22222
    33333
    <div>第2個(gè)div</div>
    <div>第3個(gè)div</div>
    <div>第4個(gè)div</div>
    <div>第5個(gè)div</div>
</div>
<script>
    var oDiv=document.getElementsByTagName('div')[0];
    var aDiv=oDiv.getElementsByTagName('div');
    //目的:獲取當(dāng)前元素的上一個(gè)哥哥元素;
    /*
    * 目的:獲取當(dāng)前元素的上一個(gè)哥哥元素;
    * 參數(shù):當(dāng)前元素
    * 返回值:當(dāng)前元素的上一個(gè)哥哥元素;
    * */
    /**
     * 功能:求當(dāng)前元素的上一個(gè)哥哥元素
     * @param curEle
     * @returns preEle
     */
    function prev(curEle){
        //如果高級(jí)瀏覽器支持的話,直接使用高級(jí)瀏覽器提供的previousElementSibling
        if(curEle.previousElementSibling){
            return curEle.previousElementSibling;
        }
        //證明瀏覽器不支持 previousElementSibling
        var prev=curEle.previousSibling;
        //循環(huán)的條件:上一個(gè)節(jié)點(diǎn),必須是個(gè)節(jié)點(diǎn),并且不是元素節(jié)點(diǎn)
        while(prev && prev.nodeType !==1){
            prev=prev.previousSibling;
        }
        return prev;
    }

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

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

  • 原文 鏈接 關(guān)注公眾號(hào)獲取更多資訊 一、基本類型介紹 1.1 Node類型 DOM1級(jí)定義了一個(gè)Node接口,該接...
    前端進(jìn)階之旅閱讀 4,063評(píng)論 7 34
  • 本章內(nèi)容 理解包含不同層次節(jié)點(diǎn)的 DOM 使用不同的節(jié)點(diǎn)類型 克服瀏覽器兼容性問題及各種陷阱 DOM 是針對(duì) HT...
    悶油瓶小張閱讀 786評(píng)論 0 1
  • 語法基礎(chǔ) 類型轉(zhuǎn)換 1,parseInt(),parseFloat(),Number()要傳參,toString(...
    ishgy閱讀 563評(píng)論 0 0
  • DOM DOM內(nèi)容主要分為四部分: 什么是DOM和節(jié)點(diǎn); 獲取節(jié)點(diǎn); 節(jié)點(diǎn)操作(3種); 屬性操作(3種)。 什么...
    magic_pill閱讀 910評(píng)論 0 1
  • 公司:寧波大發(fā)化纖有限公司 姓名:馮玉停 期數(shù):六項(xiàng)精進(jìn)224期感謝二組學(xué)員,234期感謝三組志工 [日精進(jìn)打卡第...
    塵埃wyzh閱讀 95評(píng)論 0 0

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