python dom操作


1.DOM介紹

(1)什么是DOM

  • DOM:文檔對象模型。DOM 為文檔提供了結構化表示,並定義了如何通過腳本來訪問文檔結構。目的其實就是為了能讓js操作html元素而制定的一個規范。
  • DOM就是由節點組成的。

(2)解析過程

  • HTML加載完畢,渲染引擎會在內存中把HTML文檔,生成一個DOM樹,getElementById是獲取內中DOM上的元素節點。然后操作的時候修改的是該元素的屬性
  • DOM樹(一切都是節點)

DOM的數據結構如下:

 

 

上圖可知,在HTML當中,一切都是節點:(非常重要)

  • 元素節點:HMTL標簽。

  • 文本節點:標簽中的文字(比如標簽之間的空格、換行)

  • 屬性節點::標簽的屬性。

整個html文檔就是一個文檔節點。所有的節點都是Object。

(3)DOM可以做什么

  • 找對象(元素節點)

  • 設置元素的屬性值

  • 設置元素的樣式

  • 動態創建和刪除元素

  • 事件的觸發響應:事件源、事件、事件的驅動程序

1.獲取DOM的方式

<script>
        console.log(window); //加載出窗口
        console.log(document); //打印出文檔
        console.log(document.documentElement);   //打印文檔中的元素
        console.log(document.body); //打印文檔的body

        // 通過id 獲取
        var oDiv = document.getElementById("active");
        console.log(oDiv);   // 獲取到該標簽下的內容

        var oTag = document.getElementsByTagName("div")[0];
        console.log(oTag); // div標簽

        //通過類名來獲取,獲取的也是偽數組,多個DOM對象
        var oActive = document.getElementsByClassName("box");
        console.log(oActive);
        for(var i = 0; i< oActive.length;i++){
            //樣式設置
            oActive[i].style.backgroundColor = "yellow";
        }
        //救命稻草

        var oD = document.querySelectorAll("div p");
        console.log(oD);
        oD .forEach(function (item, index) {
            console.log(item)   //  <p>倚天屠龍記</p>
        })
    </script>

 事件的三要素:事件源、事件、事件驅動程序

總結如下:

  • 事件源:引發后續事件的html標簽。

  • 事件:js已經定義好了(見下圖)。

  • 事件驅動程序:對樣式和html的操作。也就是DOM。

 <title>Title</title>
    <script>
   /*窗口加載   1.先去加載文檔  2.再去加載圖片*/
        window.onload = function () {    //此時如果不加載窗口,文檔是沒有加載進來的
            console.log(document);
            console.log(document.getElementById('btn'));
            // document.getElementById("btn").onclick = function () {
            //     alert(1);
            // };
            document.getElementById("btn").onmouseover = function(){
                console.log("鼠標懸停了")
            };
            document.getElementById("btn").onmouseout = function(){
                console.log("鼠標離開了")
            }
        }
    </script>
</head>
<body>
<button id ="btn">點我</button>

常見事件

(2)對標簽值的操作

innerText

//設置文本
var oDiv=document.getElementById('box');
oDiv.innerText='哈哈哈'

innerHTML

//既可以設置文本 又可以設置標簽  設置 set 獲取 get   點語法(set方法和get方法)
oDiv.innerHTML='<h3>嘿嘿嘿</h3>'

(3) 獲取標簽內容值

//只獲取所有(當前標簽和子標簽)文本內容
console.log(oDiv.innerText);
//獲取父標簽中所有標簽元素(子標簽,空格,換行,文本)
console.log(oDiv.innerHTML);

(4)對表單控件value的操作

//設置value值  只適應於表單控件元素
document.getElementById('user').value = 'alex';
console.log(document.getElementById('user').value);

(5)對標簽的css操作(樣式操作)

xxx.style.css的屬性key='值'

盒子顏色的切換

var oDiv = document.getElementsByClassName('box')[0];

var isRed = true;
oDiv.onclick = function () {
    if (isRed) {
        //this  誰做的事件操作 this指向誰
        this.style.backgroundColor = 'green';
        this.style.width = '400px';
        isRed = false;
    } else {
        this.style.backgroundColor = 'red';
        isRed = true;
    }

}

(6)對標簽屬性的操作

<script>
    var oDiv = document.getElementsByClassName("box")[0];
    var oBtn = document.getElementById("btn");
    var isShow = true;
    oBtn.onclick = function () {
        if(isShow){
            oDiv.id = "box1";
            oDiv.title = "hhhh";
            console.log(oDiv.className); //box
            oDiv.className = oDiv.className+"active";
            isShow = false
        }else{
            oDiv.className = "box";
            isShow = true
        }
    }
</script>

DOM的操作(創建,追加,刪除)

js中的面向對象

定時器

1. DOM的操作(創建,追加,刪除)

(1)DOM節點的獲取

  • parentNode 獲取父級標簽

  • nextElementSibling 獲取下一個兄弟節點

  • children 獲取所有的子標簽

    <script>
        var oP = document.getElementById("wuxia");
        console.log(oP.parentNode); // 父級div標簽下的所有內容
        console.log(oP.nextElementSibling.innerText);  //蕭峰
        console.log(oP.nextSibling.innerText); // IE瀏覽器
        
        var a = oP.nextElementSibling|| oP.nextSibling;
        console.log(a);
        console.log(oP.parentNode.childen);
    </script>

(2) DOM的增刪操作

創建 createElement()

//既可以創建已有的標簽,還可以創建自定義的標簽
var oDiv = document.createElement('div')

追加 appendChild() 父子標簽操作

父.appendChild(oDiv);

刪除 removeChild()

父.removeChild(子節點);
自己.parentNode.removeChild(自己)

插入insertBefore()

父.insertBefore(新的子節點,要參考的節點)

 利用創建刪除實現隱藏代碼示例

<script>
        var oBtn = document.querySelector("#btn");
        var oDel = document.querySelector("#del");
        var oFather = document.querySelector(".father");

        var oP = null;
        var oA = null;
        oBtn.onclick = function(){
            //創建 dom p標簽
            oP = document.createElement("p");
            oA = document.createElement("a");
            //追加到父級標簽中
            oFather.appendChild(oP);
            oFather.insertBefore(oA,oP);
            //設置對象屬性值
            oA.href = 'http://www.baidu.com';
            //設置值
            oA.innerText="百度";
            oP.innerHTML = "alex";
            oP.setAttribute("class","active")
        };
        oDel.onclick = function(){
            //如果oP對象存在就結束程序
            if (!oP){
                return;
            //
            }else{
                console.log(oFather);
                //將增加的p標簽移出
                oFather.removeChild(oP)
            }
        }
    </script>

使用js模擬hover選擇器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
<title>Title</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style: none;
        }
        ul{
            width: 600px;
            height: 80px;
            line-height: 80px;
            text-align:center;
            overflow:hidden;
        }
        ul li{
            float:left;
            margin: 0 10px;
            width:  80px;
            height: 80px;
            background: darkturquoise;
            color: #fff;
        }
        ul li.active{
            background: red;
        }
    </style>
</head>
<body>
<ul>
    <li>舉</li>
    <li>頭</li>
    <li>望</li>
    <li>明</li>
    <li>月</li>
</ul>
<script>
    var lists = document.getElementsByTagName("li");
    for(var i =0;i<lists.length;i++){
        lists[i].onclick = function(){
            //在修改當前盒子樣式之前,現將所有盒子的類名置空
            for(var j=0; j<lists.length;j++){
                lists[j].className ="";
            }
            this.className = "active"; //修改當前 鼠標進入盒子的樣式
        }
    }
</script>
</body>

</html>

 選項卡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
<title>Title</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style: none;
        }
        #tab{
            width: 480px;
            margin: 20px auto;
            border: 1px solid red;
        }
        ul{
            width: 100%;
            overflow: hidden;
        }
        ul li{
            float: left;
            width: 160px;
            height: 60px;
            line-height: 60px;
            text-align: center;
            background-color: #cccccc;
        }
        ul li a{
            text-decoration: none;
            color:black;
        }
        li.active {
            background-color: darkcyan;
        }
        p{
            display: none;
            height: 200px;
            text-align: center;
            line-height: 200px;
            background-color: darkgrey;
        }
        p.active{
            display: block;
        }
    </style>
</head>
<body>
<div>
    <div id="tab">
        <ul>
            <li class = "active">
                <a href="javascript:void(0);">首頁</a>
            </li>
            <li class = "active">
                <a href="javascript:void(0);">新聞</a>
            </li>
            <li class = "active">
                <a href="javascript:void(0);">圖片</a>
            </li>
        </ul>
        <p class="active">首頁內容</p>
        <p>新聞內容</p>
        <p>圖片內容</p>
    </div>
</div>

<script>
    var lists = document.getElementsByTagName("li");
    var oPs = document.getElementsByTagName("P");
         // var i;
        //i=3 變量提升 會導致 變量 是一個全局作用域
        //var 聲明變量 全局作用域,存在變量提升
    for(var i= 0; i<lists.length;i++){ //為了給每個dom添加事件
        lists[i].currentIndex = i;
        console.dir(lists[i]);
        lists[i].onclick = function(){
            for(var j = 0; j<lists.length;j++){
                lists[j].className = "";
                oPs[j].className = '';
            }
            this.className = "active";
            oPs[this.currentIndex].className = 'active'
        }
    }
</script>
</body>

</html>

 

2.js中的面向對象

(1)使用Object或對象字面量創建對象

// 構造函數方式創建對象
    let person = new Object();
    person.name = 'alex';
    person.fav = function () {
        console.log(this);
    }
    //字面量方式創建 使用最多
    var person2 = {
        name:'wusir',
        age:19,
        fav:function () {
            alert(this.age);
        }
    }
    person2.fav();

3.定時器

 

 

 

事件點擊案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<button id="btn" onclick="f1(this);">
    提交
</button>

<button id="btn2">
    確認
</button>

<div id="xxx">
    大海啊,全是水
</div>

<script>
    function f1(ths) {

        ths.style.color = 'red';
        var div1 = document.getElementById('xxx');
        div1.style.color = 'yellow';
    }

    var btn2 = document.getElementById('btn2');
    btn2.onclick = function () {
        this.style.color = 'blue';
    }

</script>

</body>
</html>

 

鼠標焦點案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" id="username" value="請輸入內容">

<script>
    //獲得焦點
    var inpEle = document.getElementById('username');
    inpEle.onfocus=function () {
        if(this.value === '請輸入內容'){
            this.value='';
        }
    };

    //失去焦點
    inpEle.onblur=function () {
        console.log('>>>>>>',this.value.trim()) //打印出來
        if (this.value.trim().length ===0){
            this.value='請輸入內容';
        }
    }
</script>

</body>
</html>

 

 

寫一個小米商城的主頁 實戰

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="小米商城首頁.css">
</head>
<body>
<div>
    <div class="nav">
        <div class="nav-center">
            <div class="nav-left">
                <a href="javascript:void (0)">小米商城</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">MIUI</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">lot</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">雲服務</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">金融</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">商城</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">小城</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">小米城</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">小城</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">小米城</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">小城</a><span>&nbsp;|</span>
                <a href="javascript:void (0)">小商城</a><span>&nbsp;|</span>
            </div>
            <div class="nav-right">
                <a href="javascript:void (0)">登錄</a><span>&nbsp;|&nbsp;</span>
                <a href="javascript:void (0)">注冊</a><span>&nbsp;|&nbsp;</span>
                <a href="javascript:void (0)">消息通知</a><span>&nbsp;|&nbsp;</span>
                <a href="javascript:void (0)">購物車</a><span>&nbsp;|&nbsp;</span>
            </div>
        </div>
    </div>
</div>

<div class="content_father">
    <div class="content1">
        <div class="content1-left">
            <a href="" class="logo">
                <img src="logo.png" alt="">
            </a>
        </div>
        <div class="content1-center">
            <a href="javascript:void (0)">小米手機</a>
            <a href="javascript:void (0)">紅米</a>
            <a href="javascript:void (0)">電視</a>
            <a href="javascript:void (0)">筆記本</a>
            <a href="javascript:void (0)">家電</a>
            <a href="javascript:void (0)">新品</a>
            <a href="javascript:void (0)">路由器</a>
            <a href="javascript:void (0)">智能硬件</a>
            <a href="javascript:void (0)">服務</a>
            <a href="javascript:void (0)">社區</a>
        </div>
        <div class="content1-right">
            <div class="btn_div">
                <input type="submit" class="search-btn">
            </div>

            <div class="a_div" id="a_div">
                <a href="">小米8</a>
                <a href="">小米MIX2S</a>
            </div>

            <div class="input_div">
                <input type="text" class="input_search" id="input_search">
            </div>

        </div>
    </div>
    <div class="content2">
        <div class="content2-left">
            <ul type="none">
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
                <li><a href="">手機&nbsp;電話卡</a><span>&gt;</span></li>
            </ul>
        </div>
        <div class="content2-right">
            <img src="lunbotu.png" alt="">

        </div>
    </div>
</div>
</div>

<script>
    var inpEle = document.getElementById('input_search');
    var aEle = document.getElementById('a_div');//獲取2個a標簽
    inpEle.onfocus=function () {
        //獲得焦點 變長 變成200px
        this.style.width='200px';
        this.style.border='1px solid #ff6700'
        aEle.style.display='none';//隱藏標簽
    }
    inpEle.onblur=function () {
        this.style.width='100px';
        this.style.borderColor='#eee'
        aEle.style.display='block';//變成塊級標簽
        this.style.borderRight='#fff';//右邊框的樣式變成白色
    }
</script>

</body>
</html>

小米商城首頁.css

body{
    margin: 0;
    padding: 0;
}
.nav{
    background-color: black;
    height: 40px;
    width: 100%;
    /*text-align: center;*/
}
.nav-center{
    width: 90%;
    height: 40px;
    margin-left: 5%;
}

.nav-left{
    float: left;
    height: 40px;
    line-height: 40px;
}
.nav-right{
    float: right;
    height: 40px;
    line-height: 40px;
}
.nav-center a{
    color: #b0b0b0;
    text-decoration: none;//去掉下划線
    font-size: 12px;
}
.nav-center a:hover{
    color: white;//鼠標放上去要變成白色
}
.nav-center span{
    color: #424242;
}
/*#################*/
/*content_father是整個中間class*/
/*content1是第一層*/
/*content2是第二層*/

/*中間像左邊浮動  搜索像右邊*/
.content1 .content1-left,.content1 .content1-center{
    float:left;
}
.content1 .content1-right{
    float:right;
}
/*在content1中清除浮動*/
.content1:after,.content2:after{
    content: '';
    display: block;
    clear: both;
}
/*設置寬高*/
.content1{
    height: 100px;
    line-height: 100px;
}

.content_father{
    width: 90%;
    margin-left: 5%;
}
.logo{
    display: inline-block;
    float: left;
    width: 0px;
    margin-top: 22px;
    /*width: 50px;*/
    /*height: 50px;*/
    /*margin-top: 10px;*/
    /*background: url("logo.png") no-repeat;*/
    /*a是行內標簽*/
    /*Display:block;將內斂標簽改為塊級標簽*/
    /*Display:inline;將塊級標簽改為內斂標簽*/
}
.content1 .content1-center{
    /*設置content1第一層中間位子大小*/
    /*margin:外邊距,盒子邊框到附近最近盒子的距離*/
    margin-left: 230px;
    height: 100px;
}
.content1 .content1-center a{
    margin-left: 16px;
    font-size: 14px;
    /*去掉下環線*/
    text-decoration: none;
    color:#333;
}

/*設置搜索框一 右邊隱藏*/
.content1 .content1-right .input_search{
    display: inline-block;
    width: 100px;
    height:38px;
    font-size: 14px;
    border: 1px solid #eeeeee;
    /*border-color:#eeeeee;*/
    border-right: #fff;
}
/*搜索框一浮動最右邊*/
.input_div{
    float:right;
}

/*#設置一個class 2個a標簽*/
.a_div{
    float:right;
    border: 1px solid #eeeeee;
    border-left: #fff;
    width: 100px;

    height: 40px;
    line-height: 40px;
    margin-top: 30px;
}

/*按鈕右浮動*/
.btn_div{
    float:right;
}
/*給class 2個a標簽設置字體顏色 去掉下划線*/
.a_div a{
    font-size: 12px;
    color:#757575;
    text-decoration: none;
}
/*鼠標懸浮改變背景顏色*/
.a_div a:hover{
    background-color: #ff6700;
}

/*設置搜索按鈕*/
.content1 .content1-right .search-btn{
    display: inline-block;
    width: 44px;
    height:44px;
    font-size: 14px;
}

/*content2 ul整體調試*/
.content2 .content2-left{
    float:left;
    width:20%;
    height: 425px;
    background-color: rgba(0,0,0,0.6);
}
.content2 .content2-left ul{
    margin-left: 0;
    padding: 0;
    /*margin:外邊距,盒子邊框到附近最近盒子的距離.*/
    /*padding:內邊距,邊框到內容的距離*/
}
.content2 .content2-left ul a{
    text-decoration: none;
    margin-left: 10%;
    color:#fff;
    float: left;
    font-size: 14px;
}
/*調試邊距*/
.content2 .content2-left ul span{
    float: right;
    color:#fff;
    margin-right: 10%;
}

/*把ul 鼠標變成小手*/
.content2 .content2-left ul li{
    width: 100%;
    height: 40px;
    line-height: 40px;
    cursor:pointer;
}
/*鼠標懸浮變顏色*/
.content2 .content2-left ul li:hover{
    background-color: #ff6700;
}

/*圖片占取80%*/
.content2 .content2-right{
    float:right;
    width:80%;
}
.content2 .content2-right img{
    float:right;
    width:100%;
    height: 425px;
}

iconfont使用 

找到圖標管理->我的項目->然后新建項目:

右邊點擊新建項目,用於保存自己常用的圖標;

step 3:項目新建完成后,往項目里添加我們要想使用的圖標,找到圖標庫,搜索一個想要的圖標,然后添加到購物車;

 

 我現在將第一個安卓圖標加入我的項目,點擊加入購物車

step 4:添加到購物車完成后,購物車徽章數字應該顯示1了,點擊右上角的購物車圖標,選擇添加至項目,選擇我們剛剛創建的項目,確定;

自動跳轉到對應的項目里了,如圖:

step 5:接下來一部比較關鍵,將打包好的字體文件下載到本地添加到你的項目中,在項目中引用文件中的iconfont.css文件;

下載下來解壓后的文件如下:

第一步:拷貝項目下面生成的font-face

將解壓的文件夾整體復制到網站目錄

將目錄名重命名為font

使用外聯樣式,連接目錄里面的iconfont.css

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="./font/iconfont.css">
</head>
<body>
<span class="iconfont icon-sousuo"></span>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM