js DOM操作

DOM操作

获取元素:

DOM传统获取元素有三种方式,getElementById、getElementsByTagName、getElementsByClassName。

<div class="box" id="timmer">box1</div>
//下面三种方式均可获取到该元素
var timmer = document.getElementById("timmer");
var timmer = document.getElementsByTagName("div");
//类选择器是HTML5新增的
var timmer = document.getElementsByClassName("box"); console.log(timmer); // console.log 返回的是元素对象 console.log(typeof timmer); // console.dir() 打印返回的元素对象,更好的查看它的属性和方法 console.dir(timmer)

querySelector() 获取元素(只能获取第一个元素):

//和上面三种方式获取元素一样,但早期ie不支持
var firstbox = document.querySelector(".box");
var firstbox = document.querySelector("div");
var firstbox = document.querySelector("#timmer");

querySelectorAll() 获取元素:

<body>
    <div class="box">box1</div>
    <div class="box">box2</div>

    <div id="nav">
        <ol>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ol>
    </div>
</body>

<script>// querySelector 也是HTML5新增的
    // document.querySelector("选择器") 可以传所有的选择器类型,返回第一个元素对象
    var firstbox = document.querySelector(".box");
    console.log(firstbox);
    var nav = document.querySelector("#nav");
    console.log(nav);
    var firstLi = document.querySelector("li");
    console.log(firstLi);
    
     // document.querySelectorAll 获取所有元素对象
    var allLi = document.querySelectorAll("li");
    console.log(allLi);
</script>

 

 获取特殊元素:

<script>
    // 1. 获取body
    var body = document.body;
    console.log(body);
    // 2. 获取html
    var html = document.documentElement;
    console.log(html);
</script>

 事件

事件三要素: 事件源 事件类型 事件处理程序。

<body>
    <button>事件三要素</button>
    <span>:</span>
</body>
<script type="text/javascript">
    // 事件三要素: 事件源 事件类型 事件处理程序
    var btn = document.querySelector("button");
    var span = document.querySelector("span");
    btn.onclick = function(){
        console.log("事件源 事件类型 事件处理程序");
        span.innerText = ":事件源 事件类型 事件处理程序";
    }
    
    function getCurrentDate(){
        var date = new Date();
        console.log(date);
        return date;
    }
</script>

点击前:点击后:

元素属性

1. 修改普通元素内容用innerText、innerHTML。

<body>
    <p id="time">日期:2021</p>
    <div id="div">
        我是第一行
        <div>
                我是第二行
        </div>
    </div>
</body>
<script type="text/javascript">
    var time = document.querySelector("#time");
    
    /**
     * innerText 不识别 html标签,非标准
     * innerHTML识别 html标签,W3C标准
     * innerText、innerHTML 都可以读取元素内容
     * innerText 忽略所有标签、空格、换行
     * innerHTML 识别标签、空格、换行
     * */
    // time.innerText = "<strong>日期:</strong>2021";
    time.innerHTML= "<strong>日期:</strong>2021";
    
    var div = document.querySelector("#div");
    console.log(div.innerText);
    console.log(div.innerHTML);
</script>

 2. 表单属性

表单元素内容是value。input有很多种type。

<body>
    <button>btn</button>
    <input placeholder="我是input" title="input" />
</body>
<script type="text/javascript">
    /**
     * 利用DOM可以操作表单的如下属性;
     * type, value, checked, selected, disabled
     * */
    var btn = document.querySelector("button");
    var input = document.querySelector("input");
    btn.onclick = function() {
        // innerHTML是普通元素的,表单元素是value
        // input.innerHTML = "被点击了";
        input.value = "被点击了";
        // 下面两句等价
        // this 指向事件函数的调用者
        // btn.disabled = true;
        this.disabled = true;
    }
</script>

点击前: 点击后:

 3. 样式属性

操作style样式时:a. 属性用驼峰命名法;b. DOM操作修改行内样式,行内样式权重更高。

<body>
    <div></div>
</body>
<script>
/**
 * 操作style样式时:
 *     1. 属性用驼峰命名法
 *  2. DOM操作修改行内样式,行内样式权重更高
 * */
    var div = document.querySelector("div");
    div.onclick = function() {
        div.style.backgroundColor = "red";
    }
</script>
<style>
    div {
        width: 100px;
        height: 100px;
        background-color: aqua;
    }
</style>

点击前:点击后:

 点击修改class:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div>div</div>
    </body>
    <script type="text/javascript">
        var div = document.querySelector("div");
        div.onclick = function(){
            /**
             * class是关键字,所以用className改变类,并会覆盖原来的类名
             * 如果想保留原来的类名,则用this.className = "firstClass change";
             * */
            // div.className = "change";
            this.className = "change";
        }
    </script>
    
    <style type="text/css">
        .change{
            background-color: #008000;
            font-size: large;
            font-weight: 700;
            color: white;
        }
    </style>
</html>

 点击前:点击后:

 4. 事件对象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div>div</div>
    </body>
    <script type="text/javascript">
        var div = document.querySelector("div");
        div.onclick = function(event){
            // 1. event就是一个事件对象,写到我们侦听函数的小括号里,当形参来看
            // 2. 事件对象有了事件才会存在,是系统自动创建的,我们不需要自己传递参数
            // 3. 事件对象 是我们事件的一系列相关数据的集合,跟事件相关的。
            // 比如鼠标点击就包含了鼠标的相关信息,比如鼠标坐标
            //键盘事件就包括了键盘事件的信息,比如判断用户按下了哪个键
            // 4. 事件对象可以自己命名,如event, evt, e
            console.log(event);
            //event.target 点击了哪个元素,就返回哪个元素
            //this 绑定了哪个元素,就返回哪个元素
            console.log(event.target);
        }
        
        //这里和上面等价
        // div.addEventListener("click",function(e){
        //     console.log(e);
        // })
    </script>
</html>

 事件委托:巧妙利用事件冒泡。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <ul>
            <li>9</li>
            <li>8</li>
            <li>7</li>
            <li>6</li>
            <li>5</li>
            <li>4</li>
            <li>3</li>
            <li>2</li>
            <li>1</li>
        </ul>
    </body>
    <script type="text/javascript">
    /**
     * 事件委托的核心:给父节点添加侦听器,利用事件冒泡影响每一个子节点
     * addEventListener("name", function(){}, true/false) 
     * 第三个参数为false或者省略是冒泡阶段
     * 第三个参数为true是捕获阶段
     * */
        var ul = document.querySelector("ul");
        ul.addEventListener("click",function(e){
            console.log(e);
            console.log("我是li冒泡到ul的事件");
        })
    </script>
    <style type="text/css">
    ul{
        background-color: yellow;
        padding: 20px;
    }
        li{
            display: inline-block;
            padding: 10px;
            background-color: red;
        }
    </style>
</html>

 

原文地址:https://www.cnblogs.com/sunshine233/p/15624090.html