• JS控制页面内容


    JS操作页面内容

    innerText:普通标签内容(自身文本与所有子标签文本)
    innerHTML:包含标签在内的内容(自身文本及子标签的所有)
    value:表单标签的内容
    outerHTML:包含自身标签在内的内容(自身标签及往下的所有)

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>JS处理页面内容</title>
        <style>
            div {
                 100px;
                height: 100px;
                background-color: cyan;
                margin-top: 15px;
            }
        </style>
    </head>
    <body>
    <div class="d1">001</div>
    <div class="d2">002</div>
    <div class="d3">003</div>
    <div class="box"></div>
    </body>
    <script>
        // 先获取页面元素
        var d1 = document.querySelector('.d1');
        var d2 = document.querySelector('.d2');
        var d3 = document.querySelector('.d3');
    
        // ① 操作文本内容
        var text = d1.innerText;
        // 获取内容
        console.log(text);
        // 修改(删除)内容
        d1.innerText = "";
        d1.innerText = "修改后的文本内容";
    
        // ② 操作子标签
        // 获取
        var html = d2.innerHTML;
        console.log(html)
        // 修改
        d2.innerHTML = "<b>加粗的文本</b>";  // 可以解析html语法的代码
        // d2.innerText = "<b>加粗的文本</b>";
    
        // 了解
        console.log(d2.innerHTML);  // 只是标签内部的子标签与子内容
        console.log(d2.outerHTML);  // 不仅包含标签内部的子标签与子内容,还包含自身标签信息
    
        // ③ 操作页面样式
        // 获取 ??
        var bgColor = d3.style.backgroundColor;  // 只能获取行间式
        console.log(bgColor);
    
        // 修改
        d3.style.backgroundColor = "yellow";  // 只能修改行间式
    
        // 问题: 那用内联外联设置的样式如何获取
        // 内联与外联设置的样式叫: 计算后样式
        // getComputedStyle(目标标签, 伪类(null填充)).具体的样式
        bgColor = window.getComputedStyle(d3, null).backgroundColor;  // 兼容性较差
        console.log(bgColor);
        // 可以获取计算后样式, 也可以获取行间式, 但它为只读
        bgColor = getComputedStyle(d3, null).getPropertyValue('background-color');  // 兼容性较好
        console.log(bgColor);
    
        // 一些不常用的属性会出现浏览器之间的兼容问题, 通过添加前缀来处理
        console.log(d3.style);
        // chrome: -webkit-
        // ie: -ms-
        // opera: -o-
    
    </script>
    <script>
        // 需求: box的颜色通过点击在cyan与red之间切换
        var box = document.querySelector('.box');
        box.onclick = function () {
            var bgColor = getComputedStyle(this, null).backgroundColor;
            console.log(bgColor);
            // 要注意计算后样式获取的结果, 以及结果具体的字符串格式
            if (bgColor == 'rgb(0, 255, 255)') {
                this.style.backgroundColor = 'red';
            } else {
                this.style.backgroundColor = 'cyan';
            }
        }
    
    
    </script>
    </html>

    JS操作页面样式

    读写style属性样式

    div.style.backgroundColor = 'red';

    1.操作的为行间式
    2.可读可写
    3.具体属性名采用小驼峰命名法

    只读计算后样式

    推荐

    getComputedStyle(页面元素对象, 伪类).getPropertyValue('background-color');

    不推荐

    getComputedStyle(页面元素对象, 伪类).backgroundColor;

    // IE9以下
    页面元素对象.currentStyle.getAttribute('background-color');
    页面元素对象.currentStyle.backgroundColor;

    1.页面元素对象由JS选择器获取
    2.伪类没有的情况下用null填充
    3.计算后样式为只读
    4.该方式依旧可以获取行间式样式 (获取逻辑最后的样式)

    结合 css 操作样式

    页面元素对象.className = ""; // 清除类名
    页面元素对象.className = "类名"; // 设置类名
    页面元素对象.className += " 类名"; // 添加类名

    实例1,JS事件控制标题栏

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>js事件控制标题栏</title>
        <style>
            .part1 div {
                 100px;
                height: 30px;
                text-align: center;
                line-height: 30px;
                float: left;
                cursor: pointer;
            }
            .part1 {
                overflow: hidden;
            }
            h2 {
                height: 30px;
                background-color: cyan;
            }
        </style>
    </head>
    <body>
        <div class="part1">
            <div class="b1">标题栏</div>
            <div class="b2">标题栏</div>
            <div class="b3">标题栏</div>
            <div class="b4">标题栏</div>
        </div>
        <h2></h2>
    </body>
    <script>
        /*
        var b1 = document.querySelector('.b1');
        // 鼠标悬浮事件
        b1.onmouseenter = function () {
            console.log("鼠标悬浮上了");
            // 悬浮上后,该标签的字体颜色变化橘色
            this.style.color = "#FF6700";
        }
        // 需求并非为鼠标移走,去除颜色
        b1.onmouseleave = function () {
            this.style.color = "#000";
        }
        */
    </script>
    <script>
        // 制作数据
        var data = ["标题1", "标题2", "标题3", "标题4"];
        var divs = document.querySelectorAll('.part1 div');
        console.log(divs);
    
        // 循环绑定 => 会出现变量(i)污染
        for (let i = 0; i < divs.length; i++) {
            divs[i].onmouseenter = function () {
                // 打印自身索引值
                console.log(i);
                // 将自身颜色变为橘色,其他兄弟颜色变为黑色
                // 就是i为橘色, 非i为黑色
                changeColor(i);
    
                // 悬浮内容
                changeContent(i)
            }
        }
        // console.log(i);
    
        // 自定义的修改颜色的方法
        function changeColor(index) {
            for (let i = 0; i < divs.length; i++) {
                // 先不管三七二十一,全改成黑色
                divs[i].style.color = "black";
                // 如果是目标选中标签,它的颜色再重新设置为橘色
                if (i == index) {
                    divs[i].style.color = "#FF6700";
                }
            }
        }
    
        var h2 = document.querySelector('h2');
        // 修改内容
        function changeContent(index) {
            h2.innerText = data[index];
        }
    
    </script>
    </html>

    实例2,JS控制类名

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>js控制类名</title>
        <style>
            .y {
                 100px;
                height: 100px;
                background-color: red;
                border-radius: 50%;
            }
            .f {
                 100px;
                height: 100px;
                background-color: orange;
            }
            .g {
                display: none;
            }
            .ttt {
    
            }
        </style>
    </head>
    <body>
    <ul>
        <li class="l1">圆</li>
        <li class="l2">方</li>
        <li class="l3">滚</li>
    </ul>
    <div></div>
    </body>
    <script>
        var box = document.querySelector('div');
    
        var l1 = document.querySelector('.l1');
        l1.onclick = function () {
            box.className = 'y'
        }
        var l2 = document.querySelector('.l2');
        l2.onclick = function () {
            box.className = 'f'
        }
        var l3 = document.querySelector('.l3');
        l3.onclick = function () {
            box.className = 'g';
            // box.className = ""; // 清除类名
            // box.className = 'y f';
            // box.className += " ttt";
        }
    
    </script>
    </html> 

    事件的绑定与取消

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>事件的绑定与取消</title>
        <style>
            .box {
                 100px;
                height: 100px;
                background-color: orange;
                border-radius: 50%;
            }
        </style>
    </head>
    <body>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="begin">开始</div>
    <div class="event_on1">事件的绑定1</div>
    <div class="event_on2">事件的绑定2</div>
    </body>
    <script>
        // 每一个box点击都会toggle颜色, 当颜色都变成黑色, 取消所有点击事件,
        // 点击开始, 重新获得点击事件(所有状态应该重置)
    
        var beginBtn = document.querySelector('.begin');
        var boxs = document.querySelectorAll('.box');
    
        // 定义一个count计算器,计黑的个数
        var count = 0;
    
        // 启动服务
        beginBtn.onclick = init;
        
        // 开始功能
        // function beginAction() {
        //     // 让所有box拥有点击事件
        // }
        // box点击切换颜色
        function toggleColor() {
            // console.log(this)
            if (this.style.backgroundColor == "orange") {
                this.style.backgroundColor = "black";
                count++;
            } else {
                this.style.backgroundColor = "orange";
                count--;
            }
            // 检测是否需要结束
            count == 3 && overAction();
        }
        // 结束功能, 取消所有box点击事件
        function overAction() {
            for (var i = 0; i < boxs.length; i++) {
                 boxs[i].onclick = null;
            }
        }
        // 重置功能, 并让所有box拥有点击事件
        function init() {
            for (var i = 0; i < boxs.length; i++) {
                boxs[i].style.backgroundColor = "orange";
                boxs[i].onclick = toggleColor;
            }
            // 计算器重置
            count = 0;
        }
        // 启动服务
        // init();
    </script>
    <script>
        var event_on1 = document.querySelector('.event_on1');
        // 事件绑定的第一种方式
        event_on1.onclick = function () {
            console.log(1)
        };
        event_on1.onclick = function () {
            console.log(2)
        }
    
        // 事件绑定的第二种方式
        var event_on2 = document.querySelector('.event_on2');
        // 可以为一个元素绑定多个事件, 按绑定顺序依次执行
        event_on2.addEventListener('click', function () {
            console.log("a")
        });
        var action = function () {
            console.log("b")
        }
        event_on2.addEventListener('click', action);
    
        // 如何取消事件
        event_on2.removeEventListener('click', action)
    
    
    </script>
    </html>

    复习总结并延伸

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>复习预习</title>
        <style>
            [key='value'] {
                color: #0f8209;
            }
        </style>
    </head>
    <body>
        <div class="ele" alert="OK">div div div</div>
    </body>
    <script>
        // 1.面向对象js
        // ES5
        // 普通的单一对象
        var obj = {
            // 普通对象的属性
            key: "value",
            fn: function () {
                console.log("普通对象的方法")
            }
        };
        console.log(obj.key);
        console.log(obj["key"]);
        // 1.key的类型为字符串类型
        // 结论:
        //      js支持的标识符可以省略引号, 反之不可以省略
        //      不支持的标识符访问方式: 不可以采用.语法,需要采用[]语法,eg:obj["background-color"]
    
        var obj1 = {
            "name": "obj1",
            // key有时候会出现js不能直接支持的标识符书写方式
            // 需求: obj1用来描述页面标签的各种颜色
            color: "red",
            // "color": "red",
            "background-color": "yellow"
        }
        console.log(obj1.name);
        console.log(obj1["name"]);
        console.log(obj1.color);
        // obj1.background = 12;
        // color = 10;
        console.log(obj1["background-color"]);
    
        // 2. 对象可以任意添加或删除属性
        var obj2 = {
            name: "obj2"
        };
        console.log(obj2);
        // 删除属性
        delete obj2.name;
        console.log(obj2);
        // 添加属性
        obj2.age = 8;
        console.log(obj2);
    
        // 拓展: 获取的页面元素就是标签对象, 可以对其添加任意属性
        var ele = document.querySelector('.ele');
        console.log(ele.info);  // 直接使用无值, 原因ele并没有添加该属性
        ele.info = "添加的属性信息";  // 添加属性
        console.log(ele.info);  // 添加属性后就可以正常方式添加的属性值
        delete ele.info;  // 删除操作
        console.log(ele.info);  // 删除后属性又会消失
    
        // 构造函数
        function Perple(name, age) {
            this.name = name;
            this.age = age;
            this.fn = function () {
                console.log("fn")
            }
        }
        // 实例化对象
        var p = new Perple("张三", 18);
        p.fn();
    
        // ES6
        class Student {
            constructor (name, age) {
                this.name = name;
                this.age = age;
            }
            fn () {
                console.log("fn")
            }
        }
        var s = new Student("张三", 18);
        s.fn();
    
    </script>
    <script>
        // getElementById只能由document调用
        var ele = document.getElementsByClassName("ele")[0];
        console.log(ele);
        ele = document.querySelector(".ele");
        console.log(ele);
        ele = document.querySelectorAll(".ele")[0];
        console.log(ele);
    
        // 该添加属性的方式只映射到js代码中
        ele.index = 123;
        console.log(ele.index);
    
        // js如何操作元素(页面标签)的全局属性, 映射到html代码中
        ele = document.querySelector('[alert]');  // 通过全局属性获取元素
        console.log(ele);
        // 获取全局属性值
        var info = ele.getAttribute('alert');
        console.log(info);
        // 修改全局属性值
        ele.setAttribute('alert', 'no ok');
        // 添加全局属性值(映射到html代码中) => 结合CSS来控制页面标签的样式
        ele.setAttribute('key', 'value');
    
    </script>
    </html>

    小练习  开灯关灯封装

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>开灯关灯封装</title>
        <style type="text/css">
            .wrap {
                 280px;
                height: 280px;
                margin: 100px auto;
            }
            
            .wrap div {
                 55px;
                height: 55px;
                margin: 1px 1px 0 0;
                /*background-image: url(img/off.png);*/
                background-color: black;
                float: left;
                border-radius: 20%;
            }
            .begin {
            		 80px;
            		height: 35px;
            		background-color: dodgerblue;
            		font: normal 20px/ 35px "STSong";
            		text-align: center;
            		color: white;
            		margin: -50px auto;
            		border-radius: 10px;
            		cursor: pointer;
            }
            .begin:active {
            		background-color: deepskyblue;
            }
        </style>
    </head>
    <body>
    	<div class="wrap">
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>
        <div class="begin" onclick="beginGame()">开始</div>
    </body>
    <script type="text/javascript">
    	// 设定运用到的全局变量
    	var divs = null; // 存放25盏灯
    	var count = 0; // 记录关闭的灯的盏数
    	
    	// 游戏结束功能
    	function gameOver() {
    		if (count == divs.length) {
    			var timeout = setTimeout(function() {
    				alert("游戏结束!");
    				// 清除定时器
    				clearTimeout(timeout);
    			}, 10);
    		}
    	}
    	
    	// 初始化操作功能
    	function initGame() {
    		divs = document.querySelectorAll('.wrap div');
    		count = 0;
    		for (var i = 0; i < divs.length; i++) {
    			// 1、设置背景颜色(设置灯初始状态)
    			// divs[i].style.backgroundImage = 'url("img/on.png")';
    			divs[i].style.backgroundColor = "yellow";
    			// 2、给每盏灯按顺序编号
    			divs[i].index = i; 
    			// 3、给每盏灯绑定点击事件
    			divs[i].onclick = eleOnclick;
    		}
    		
    	}
    	
    	// 点击事件功能
    	function eleOnclick() {
    		// 保存但前被点击的索引,以便查找出周围的元素
    		var index = this.index;
    		// 自身
    		changeBGImg(this);
    		// 上
    		if (index >= 5) {
    			changeBGImg(divs[index - 5]);
    		}
    		// 下
    		if (index < 20) {
    			changeBGImg(divs[index + 5]);
    		}
    		// 左
    		if (index % 5 != 0) {
    			changeBGImg(divs[index - 1]);
    		}
    		// 右
    		if (index % 5 != 4) {
    			changeBGImg(divs[index + 1]);
    		}
    		// 点击结束后检查游戏是否结束
    		gameOver();
    	}
    
    	// 切换背景图片功能
    	function changeBGImg(ele) {
    		// var tempImg = ele.style.backgroundImage;
    		var tempColor = ele.style.backgroundColor;
    		if (tempColor == "yellow") {
    			ele.style.backgroundColor = 'black';
    			count++;
    		} else{
    			ele.style.backgroundColor = 'yellow';
    			count--;
    		}
    	}
    	
    	// 游戏开始功能
    	function beginGame() {
    		initGame();
    	}
    	
    	
    	
    </script>
    </html>

    小练习分析

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>事件高级</title>
        <style>
            .box {
                 350px;
                height: 350px;
                margin: 100px auto 0;
            }
            .box div {
                 70px;
                height: 70px;
                background-color: yellow;
                border-radius: 50%;
                float: left;
            }
        </style>
    </head>
    <body>
    <div class="box">
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>
    </body>
    <script>
        var divs = document.querySelectorAll(".box div");
    
        // 需要注意的点: 我们需要修改背景颜色, 背景颜色是计算后样式,
        // 那么getComputedStyle()获取颜色的格式需要手动处理, 而行间式不需要处理,
        // 且行间式不仅可以设置, 还可以修改  => 将原本计算后样式设置的更改为行间式
    
        // 通过循环利用行间式将所有背景颜色重置
        for (let i = 0; i < divs.length; i++) {
            divs[i].style.backgroundColor = "black";
        }
    
        // 游戏的实现
        for (let i = 0; i < divs.length; i++) {
            // 循环绑定 (问题: 变量污染)
            divs[i].onclick = function () {
                console.log(i)
    
                // toggle 颜色 => 抽离出toggle颜色的方法
    
                // 修改自身
                toggleBGColor(this);
    
                // 修改上下左右, 考虑问题, 不存在的兄弟方位
                // 上, 关系i-5, 第一排没有上 i < 5 => 对立面 i >= 5均有上
                if (i >= 5) {
                    var topEle = divs[i - 5]
                    toggleBGColor(topEle);
                }
                // 下, 关系i+5, 最后一排没有下, 对立面 i < 20
                i < 20 && toggleBGColor(divs[i + 5]);
    
                // 左, 关系i-1, 第一列没有左, 对立面 i % 5 != 0
                i % 5 != 0 && toggleBGColor(divs[i - 1]);
    
                // 右, 关系i+1, 最后一列没有右, 对立面 i % 5 != 4
                i % 5 != 4 && toggleBGColor(divs[i + 1]);
            }
        }
        
        function toggleBGColor(ele) {
            var bgColor = ele.style.backgroundColor;
            if (bgColor == 'black') {
                ele.style.backgroundColor = "yellow";
            } else {
                ele.style.backgroundColor = "black";
            }
        }
    </script>
    </html>
    

      

  • 相关阅读:
    C#语法糖(Csharp Syntactic sugar)大汇总
    js+JQuery实现返回顶部功能
    【深入ASP.NET原理系列】--ASP.NET页面生命周期
    扩展类
    c# 扩展方法奇思妙用
    常用excel技巧
    SQL Server之数据库语句优化
    SQL Server 聚合函数算法优化技巧
    十步完全理解SQL
    SQL语句统计每天、每月、每年的数据
  • 原文地址:https://www.cnblogs.com/596014054-yangdongsheng/p/10150552.html
Copyright © 2020-2023  润新知