第五章 DOM

  • DOM是”Document Object Model“(文档对象模型)的首字母缩写。

  • O Javascript语言中的对象可以分为三种类型:

    • 顶层对象是bom

  1. 用户定义对象(user-defined object):由程序员自行创建的对象。

  2. 内建对象(native object):内建的Javascript语言中的对象,如Array、Math和Date等。

  3. 宿主对象(host object):由浏览器提供的对象,比如window对象

  • DOM中的“M”代表着“Model”(模型)---家谱树模型也非常适用用来表示一份用HTML语言编写出来的文档

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>class list</title>
</head>
<body>
    <h2>你要买什么课程?</h2>
    <p title='请您选择购买的课程'>本课程是web全栈课程,期待你的购买!</p>
    <ul id='classList'>
        <li class='item'>JavaScript</li>
        <li class='item'>css</li>
        <li>DOM</li>
    </ul>
</body>
</html>
  • 节点(node)这个名词来自网络理论,它代表着网络中的一个连接点。网络是有节点构成的集合。文档也是有节点构成的集合,只不过此时的节点是文档树上的树枝和树叶而已

  • 元素节点:在刚才上述的“课程列表”的文档时,像body\p\ul 之类的元素这些我们都称为叫元素节点(element node)。如果把web上的文档比作一座楼,元素就是建造这座楼的砖块,这些元素在文档中的布局形成了文档的结构。

  • 文本节点:p标签里面的内容

<p title='请您选择购买的课程'>本课程是web全栈课程,期待你的购买!</p>。由此可见,<p>元素包含着文本"本课程是web全栈课程,期待你的购买!"。
它是一个文本节点(text node)
  • 属性节点:元素都或多或少的有一些属性,属性的作用是对元素做出更具体的描述。因为属性总是被放在起始标签里,所以属性节点总是被包含在元素节点当中。并非所属地额元素都包含着属性,但所有的属性都会被包含在元素里。
<p title='请您选择购买的课程'>本课程是web全栈课程,期待你的购买!</p>
在DOM中,title='请您选择购买的课程'是一个属性节点(attribute node)
5.1 获取节点对象的方式
#通过id获取单个节点对象
document.getElementById();
var box = document.getElementById('box');
console.log(box); #获取当前节点对象
console.dir(box);#获取节点对象的属性方法

#通过标签名获取节点对象
document.getElementsByTagName();
document.getElementsByTagName();
var box2 = ocument.getElementById('div');
console.log(box2); 获取出来的是伪数组
var lis = ocument.getElementById('li');
for (var i =0;i < lis.length;i++){
    console.log(lis[i]);
}
#通过类名获取节点对象
document.getElementsByClassName('类名');
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            ul li{
                color: black;
            }
            ul li.active{
                color: red;
            }
        </style>
    </head>
    <body>
        <div id="box">MJJ</div>
        <ul id="box2">
            <li class="active">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ul>
        <script type="text/javascript">
            // 1.通过id获取单个节点对象
            /* var box = document.getElementById('box');
            console.log(box);
            console.dir(box);
            // 2.通过标签名来获取节点对象 
            var box2 = document.getElementsByTagName('div');
            console.log(box2);
            var lis = document.getElementsByTagName('li');
            for(var i = 0; i < lis.length; i++){
                // lis[i].className = 'active';
                lis[i].onclick = function(){
                    // this指向了绑定onclick的那个对象
                    // 排他思想
                    for(var j = 0; j < lis.length; j++){
                        lis[j].className = '';
                    }
                    
                    this.className = 'active';
                }
            }
            // 3.通过类名获取
            var lis2 = document.getElementsByClassName('active'); */
            // console.log(lis2);
            var box = document.getElementById('box2');
            console.log(box.children);
        </script>
    </body>
</html>
5.2 对样式操作
box.style.color
box.style.backgroundColor
box.style.width
....
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            #box{
                width: 200px;
                height: 200px;
                background-color: red;
            }
        </style>
    </head>
    <body>
        <div id="box">mjj</div>
        <script type="text/javascript">
            // 1.获取事件源对象
            var box = document.getElementById('box');
            
            // 2.绑定事件
            /* box.onmouseover = function (){
                // 3.让标签的背景色变绿
                
                box.style.backgroundColor = 'green';
                box.style.fontSize = '30px';
                
                
            }
            box.onmouseout = function (){
                // 3.让标签的背景色变绿
                
                box.style.backgroundColor = 'red';
                box.style.fontSize = '16px';

            } */
            var isRed = true;
            box.onclick = function(){
                if(isRed){
                    this.style.backgroundColor = 'green';
                    isRed = false;
                }else{
                    this.style.backgroundColor = 'red';
                    isRed = true;
                }
                
            }
            
        </script>
    </body>
</html>
5.3 对属性设置
setAttribute(name,value);添加
getAttribute(name); 得到

    设置样式
    obj.style.    样式

    设置属性
    obj.setAttribute(name,value);
    obj.getAttribute(name);
    obj.className 设置类名
    obj.title 设置标题
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            .a{
                color: red;
                font-size: 30px;
            }
            p.active{
                color: blue;
            }
        </style>
    </head>
    <body>
        <p title="我的班级" id="p1" class="a">21</p>
        <script type="text/javascript">
            
            // 如果是自定义的属性,要在文档上能看到,通过setAttribute设置属性
            var p1 = document.getElementById('p1');
            /* console.log(p1.getAttribute('title'));
            console.log(p1.getAttribute('class'));
            p1.setAttribute('class','abc');
            p1.setAttribute('adadad','1321313'); */
            
            console.log(p1.className);
            console.log(p1.title);
            p1.abc = 123;
            console.dir(p1);
            p1.onclick = function(){
                this.className = this.className +' active';
            }
            
        </script>
    </body>
</html>
5.4 事件
onclick 单击事件
onmouseover()  鼠标悬浮事件
onmouseout()  鼠标悬浮离开事件
5.5 节点的创建、添加、删除
document.createElement();创建节点
.appendChile(需要追加的节点); 追加节点
.insertBefore(新的节点,在哪个节点插入);在什么节点之前添加
.removeChild(需要删除的节点); 删除节点removeChild()方法从子节点列表中删除某个节点。如果删除成功,此方法可返回被删除的节点,如失败,则返回NULL
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <ul id="box">
            
        </ul>
        <script type="text/javascript">
            var ul = document.getElementById('box');
            // 创建节点
            var li1 = document.createElement('li');
            var li2 = document.createElement('li');
            // innerText 只设置文本
            // li1.innerText  = '<a href="#">123</a>';
            li1.innerHTML = '<a href="#">123</a>';
            li1.setAttribute('class','active');
            console.log(li1.children);
            li1.children[0].style.color = 'red';
            li1.children[0].style.fontSize = '20px';
            ul.appendChild(li1);
            
            li2.innerHTML = '第一个';
            ul.insertBefore(li2,li1);
            
            ul.removeChild(li2);
        </script>
    </body>
</html>

例题 图片切换,一共五张图片

<body>
     <img src='images/1.jpg' id='imgbox' width=200 heigh=200>
     <br>
     <button id='prev'>
          上一张
     </button>
      <button id='next'>
          下一张
     </button>
    <script type='text/javascript'>
        var imgbox = document.getElementByID('imgbox');
        var nextbtn = document.getElemnetById('next');
                var prevbtn = document.getElemnetById('prev');
        var mixindex = 1;maxindex=5;currentindex=minindex;
        nextbtn.onclick=function(){
            if (currentindex ===maxindex){
                currentindex = mixindex;
            }else{
                currentindex ++;
            }
            imgbox.setAttribute('src','images/${currentindex}.jpg')
        }
          prevtbtn.onclick=function(){
            if (currentindex ===mixindex){
                currentindex = maxindex;
            }else{
                currentindex --;
            }
            imgbox.setAttribute('src','images/${currentindex}.jpg')
        }
    </script>
</body>

 

posted @ 2020-05-05 17:30  炜琴清  阅读(162)  评论(0编辑  收藏  举报