DOM(1)

一、DOM简介

1、什么是DOM:文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。
W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容、结构和样式。
2、DOM树
在这里插入图片描述
元素:页面中的所有标签都是元素,DOM中使用element表示
节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM中使用node表示
DOM把以上内容都看做是对象。

二、获取元素

1、根据ID获取元素

1、因为我们文档页面从上往下加载,所以先要有标签,所以我们script写到标签的下面
2、get是获得的意思,element是元素的意思,by是通过的意思,用驼峰命名法严格区分大小写
3、参数:里面写id,id是大小写敏感的字符串
4、返回的是一个元素对象

        var timer = document.getElementById('time');
        console.log(timer);
        console.log(typeof timer);//输出结果为:object
        console.dir(timer);//console.dir打印我们返回的元素对象,更好的查看里面的属性和方法
    </script>

2、根据标签名获取元素

<body>
    <ul>
        <li>蒹葭苍苍,白露为霜</li>
        <li>所谓伊人,在水一方</li>
        <li>溯洄从之,道阻且长</li>
        <li>溯游从之,宛在水中央</li>
    </ul>
    <ul id="nav">
        <li>蒹葭</li>
        <li>蒹葭</li>
        <li>蒹葭</li>
        <li>蒹葭</li>
    </ul>
    <script>
        var lis = document.getElementsByTagName('li');
        console.log(lis);//返回的是:获取过来元素对象的集合,以伪数组的形式存储的
        console.log(lis[0]);//返回的就是:<li>蒹葭苍苍,白露为霜</li>
        //我们想要依次打印里面的元素对象我们可以采取遍历的方式
        for (var i = 0; i < lis.length; i++){
            console.log(lis[i]);
        }
        //element.getElementsByTagName()可以得到这个元素里面的某些标签 element:元素
        var nav = document.getElementById('nav');//这个获得nav元素
        var navLis = nav.getElementsByTagName('li');
        console.log(navLis);
    </script>
</body>

3、根据类名返回元素对象集合

<body>
    <div class="box">盒子1</div>
    <div class="box">盒子2</div>
    <div id="nav">
        <ul>
            <li>首页</li>
            <li>产品</li>
        </ul>
    </div>
    <script>
        //1、getElementsByclssName 根据类名获得某些元素集合。
        var boxs = document.getElementsByClassName('box');
        console.log(boxs);//得到所有的box
        //2、querySelector 返回指定选择器的第一个元素对象 注意:里面的选择器需要加符号:.box:类 #nav:id
        var firstBox = document.querySelector('.box');
        console.log(firstBox);//输出结果就是:<div class="box">盒子1</div>
        var nav = document.querySelector('#nav');
        console.log(nav);//输出的就是id:nav里面的东西了
        var li = document.querySelector('li')
        console.log(li);//输出结果就是第一个li里面的内容了
        //3、querySelectorAll 返回指定选择器的所有元素对象的集合
        var allBox = document.querySelectorAll('.box')
        console.log(allBox);//得到所有的box
        var lis = document.querySelectorAll('li');
        console.log(lis);//得到所有的li
    </script>
</body>

4、获取body和html元素

    <script>
        //1、获取body元素
        var bodyEle = document.body;
        console.log(bodyEle);//返回body元素对象
        console.dir(bodyEle);//body是元素对象
        //2、获取html元素
        var htmlEle = document.html;
        console.log(htmlEle);//结果为:undefined
        var htmlEle1 = document.documentElement;
        console.log(htmlEle1);//获取到HTML标签
    </script>

三、事件基础

所谓事件就是触发响应的一种机制,比如:点击按钮,弹出对话框
1、事件是有三部分组成的:事件源、事件类型、事件处理程序。我们也称为事件三要素。

鼠标事件触发条件
onclick鼠标点击左键触发
onmouseover鼠标经过触发
onmouseout鼠标离开触发
onfocus获得鼠标焦点触发
onblur失去鼠标焦点触发
onmousemove鼠标移动触发
onmouseup鼠标弹起触发
onmousedown鼠标按下触发
        //(1)、事件源:事件别触发的对象谁被触发谁就是事件源
        var btn = document.getElementById('btn');
        //事件类型:如何触发,什么事件,比如鼠标点击,还是鼠标经过,还是键盘按下,或者滚轮滚动,这都是事件类型。
        //事件处理程序:通过一个函数赋值的方式来完成。
        btn.onclick = function () {//onclick是:鼠标点击,事件类型;btn是:事件源;function是:事件处理程序。
            alert('秋香姐');
        }        

做个例子:点击div,控制台就会输出:我被选中了。

    <div>123</div>
    <script>
        //1、获取事件源
        var div = document.querySelector('div');
        //2、绑定事件(注册事件)
        //div.onclicl
        //3、添加事件处理程序
        div.onclick = function () {
            console.log('我被选中了');
        }
    </script>

四、操作元素

1、改变元素内容

    <style>
        div,p{
            width:300px;
            height:30px;
            line-height: 30px;
            color: #fff;
            background-color: aqua;
        }
    </style>
</head>
<body>
    <button>显示当前系统时间</button>
    <div>某个时间</div>
    <p>时间</p> 
    <div></div>
    <p>
        文字
        <span>123</span>
    </p>
    <script>
        // //当我们点击按钮,div里面的文字发生变化
        // //1、获取元素
        // var btn = document.querySelector('button');
        // var div = document.querySelector('div');
        // //2、注册事件
        // btn.onclick = function(){
        //     div.innerText = getDate();//innerText:改变元素内容
        // }
        // function getDate(){
        //     var date = new Date();
        //     var year = date.getFullYear();
        //     var month = date.getMonth()+1;
        //     var dates = date.getDate();
        //     var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
        //     var day = date.getDay();
        //     return '今天是:' + year + '年' + month + '月' + dates + '日' + arr[day];
        // }
        // //元素不添加事件,直接来使用
        // var p = document.querySelector('p');
        // p.innerText = getDate();//这样就是网页一刷新就显示。
        //innerText 和 innerHTML的区别
        //1、innerText 不识别html标签,去除空格和换行
        var div = document.querySelector('div');
        //div.innerText = '<strong>今天是:</strong> 2019';//像是结果为:<strong>今天是:</strong> 2019,直接把标签显示出来了。
        //2、innerHTML  识别html,保留空格和换行
        div.innerHTML = '<strong>今天是:</strong> 2019';//innerHTML识别html标签,显示出来的文字加粗了。
        //这两个属性是可读写的,可以获取元素里面的内容。
        var p = document.querySelector('p');
        console.log(p.innerText);
        console.log(p.innerHTML);
    </script>
</body>

2、常用元素的属性操作

<body>
    <button id="t1">01</button>
    <button id="t2">03</button>
    <img src="photo/01.jpg" alt="" title="01小姐姐">

    <script>
        //修改元素属性 src
        //1、获取元素
        var t1 = document.getElementById('t1');
        var t2 = document.getElementById('t2');
        var img = document.querySelector('img');
        //2、注册事件 处理程序
        t2.onclick = function(){
            img.src = 'photo/03.jpg';
            img.title = '03小姐姐';
        }
        t1.onclick = function(){
            img.src = 'photo/01.jpg';
            img.title = '01小姐姐';
        }
    </script>
</body>

3、表单元素的属性操作

<body>
    <button>按钮</button>
    <input type="text" value="输入内容">
    <script>
        //1、获取元素
        var btn = document.querySelector('button');
        var input = document.querySelector('input');
        //2、绑定事件 处理程序
        btn.onclick = function(){
            //input.innerHTML = '点击了';//这个是没有用的,这个是普通盒子,比如div标签里面的内容才用的。
            //表单里面的值,文字内容是通过value来修改的。
            input.value = '点击了';
            //如果想要某个表单被禁用,如btn,不能再点击,用disabled,我们想要这个按钮禁用。
            //btn.disabled = true;//按钮被禁用
            this.disabled = true;//同上
            //this 指向的是事件函数的调用者 btn。
        }
    </script>
</body>

4、行内样式操作

    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: aqua;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        //1、获取元素
        var div = document.querySelector('div');
        //2、注册事件
        div.onclick = function(){
            //里面的属性采取的是驼峰命名法
            this.style.backgroundColor = 'purple';
            this.style.width = '300px';
        }
    </script>
</body>

5、类名样式操作

    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: aqua;
        }
        .change{
            background-color: purple;
            color: #fff;
            font-size: 25px;
            margin-top: 100px;
        }
    </style>
</head>
<body>
    <div class="first">文本</div>
    <script>
        //1、使用element.style 获得修改元素样式 如果样式比较少或者功能简单的情况下使用
        var div = document.querySelector('div');
        div.onclick = function () {
            // this.style.backgroundColor = 'purple';
            // this.style.width = '300px';

            //2、我们可以通过修改元素的className更改元素的样式,适合于样式较多或者功能复杂的情况
            //this.className = 'change';让我们当前元素的类名改为了 change
            //3、className更改元素会覆盖掉原先的类名,如果想要保留原先的类名,我们可以用多类名选择器
            this.className = 'first change';
        }
    </script>
</body>

6、循环的排他思想

<body>
    <button>按钮1</button>
    <button>按钮2</button>
    <button>按钮3</button>
    <button>按钮4</button>
    <button>按钮5</button>
    <script>
        //1、获取元素 所有按钮
        var btns = document.getElementsByTagName('buttn');
        //butns得到的是伪数组,里面的每一个元素用btns[i]
        for (var i = 0; i < btns.length; i++){
            btns[i].onclisk = function(){
                //(1)、我们先把所以的按钮背景颜色去掉
                for (var i = 0; i < btns.length; i++){
                    btns[i].style.backgroundColor = '';
                }
                //(2)、然后再让当前元素背景颜色为red
                this.style.backgroundColor = 'red';
            }
        }
        //排他思想:就是先排除自己人,然后再设置自己的样式,这种排除其他人的思想就是排他思想。
    </script>
</body>

来个栗子:表单全选和取消全选

    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .wrap {
            width: 200px;
            margin: 100px auto 0;
        }

        table {
            border-collapse: collapse;
            border-spacing: 0;
            border: 1px solid #c0c0c0;
            width: 200px;
        }
    </style>
</head>

<body>
    <div>
        <table>
            <tr>
                <th>
                    <input type="checkbox" name="" id="j_cbAll" />
                </th>
                <th>商品</th>
                <th>价钱</th>
            </tr>
        </table>
        <table id="j_tb">
            <tr>
                <td>
                    <input type="checkbox" name="" id="" />
                </td>
                <td>iPhone8</td>
                <td>8000</td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="" id="" />
                </td>
                <td>iPAD Pro</td>
                <td>5000</td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="" id="" />
                </td>
                <td>iPad Air</td>
                <td>2000</td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="" id="" />
                </td>
                <td>Apple Watsh</td>
                <td>2000</td>
            </tr>
        </table>
    </div>
    <script>
        //1、获取元素
        var j_cbAll = document.getElementById('j_cbAll');//全选按钮
        var j_tbs = document.getElementById('j_tb').getElementsByTagName('input');//下面的所有复选框
        //2、绑定事件
        j_cbAll.onclick = function () {
            for (var i = 0; i < j_tbs.length; i++) {
                j_tbs[i].checked = this.checked;
            }
        }
        for (var i = 0; i < j_tbs.length; i++) {
            //声明一个flag:控制全选按钮是否选中
            j_tbs[i].onclick = function () {
                //声明一个flag:控制全选按钮是否选中
                var flag = true;
                for (var i = 0; i < j_tbs.length; i++) {
                    if (!j_tbs[i].checked) {
                        flag = false;
                        break; //退出for循环,这样做提高执行效率,只要有一个没被选中,剩下的就不需要循环判断了。
                    }
                }
                j_cbAll.checked = flag;
            }
        }
    </script>
</body>

7、自定义属性的操作

<body>
    <div id="demo" index = "1"></div>
    <script>
        var div = document.querySelector('div');
        //1、获取元素的属性值
        //(1)、element.属性
        console.log(div.id);
        //(2)、element.getAttribute('属性');get:获取 attribute:属性 我们可以自己添加的属性称为自定义属性 index就是自定义属性,我们通常用element.getAttribute('属性');来获取
        console.log(div.getAttribute('id'));
        console.log(div.getAttribute('index'));
        //2、设置元素属性值
        //(1)、element.属性 = '值';
        div.id = 'test';
        div.className = 'navs';
        //(2)、element.setAttr('属性','值'); 主要针对自定义属性
        div.setAttribute('index',2);
        div.setAttribute('class','footer');//class 特殊,这里面写的就是class不是className
        //3、移除属性 removeAttribute(属性);
        div.removeAttribute('index');//结果就没有index了。
    </script>
</body>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值