【Web API】DOM小案例

news/2024/7/19 12:53:28 标签: javascript, js, dom

 

 

密码输入时的小眼睛

javascript">// 核心思路:密码框和文本框的转换:即input的type属性的转换——password和text
// 另一个就是flag的使用,不必多说

 
切换背景

javascript">// 核心思路: 修改body的backgroundImage属性
document.body.style.backgroundImage = 'url(' + this.src + ')';		// 注意如何选出body;等号右边是拼接的字符串

 
输入提示与判断
在这里插入图片描述

.wrong {
    color: red;
    background-image: url(wrong.png);
}

.right {
    color: green;
    background-image: url(right.png);
}
<div class="register">
    <input type="password" class="myInput">
    <p class="msg">请输入6~16位的密码</p>
</div>
<script>javascript">
    var myInput = document.querySelector('.myInput');
    var msg = document.querySelector('.msg');
    myInput.onblur = function() {
        if (this.value.length < 6 || this.value.length > 16) {
            msg.className = 'msg wrong';
            msg.innerHTML = '您输入的密码位数不满足6~16位';
        } else {
            msg.className = 'msg right';
            msg.innerHTML = '密码满足要求';
        }
    }
</script>

 
tab栏切换(点击)(★☆★)
在这里插入图片描述

<div class="nav-top">
    <ul>
        <li class="selected">按钮1</li>			<!-- 默认选中项 -->
        <li>按钮2</li>
        <li>按钮3</li>
        <li>按钮4</li>
        <li>按钮5</li>
    </ul>
</div>
<div class="nav-content">
    <div class="part" style="display: block;">模块1</div>	 <!-- css中把所有part设置为display:none; 这里利用了行内样式权重高的知识点 -->
    <div class="part">模块2</div>
    <div class="part">模块3</div>
    <div class="part">模块4</div>
    <div class="part">模块5</div>
</div>

<script>javascript">
    // 两个功能模块1:导航栏按钮;内容显示
    var navLists = document.querySelector('.nav-top').querySelectorAll('li');
    var partList = document.querySelector('.nav-content').querySelectorAll('.part');
    // 给导航栏设置index属性,以便于内容的下标对应
    for (var i = 0; i < navLists.length; i++) {
        navLists[i].setAttribute('data-index', i);
    }
    for (var i = 0; i < navLists.length; i++) {
        navLists[i].onclick = function() {
            // 按钮排他性
            for (var i = 0; i < navLists.length; i++) {		// "干掉所有人"
                navLists[i].className = '';                 
            }              
            this.className = 'selected';                    // "留下我自己"
           
            // 显示内容排他性
            for (var i = 0; i < partList.length; i++) {     					 // "干掉所有人"
                partList[i].style.display = 'none';
            }
            partList[this.getAttribute('data-index')].style.display = 'block';   // "留下我自己"
        }
    }
</script>

 
隐藏下拉菜单(★☆★)
在这里插入图片描述

<ul class="nav">
    <li>
        <a href="#">loli</a>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </li>
    <li>
    	<!-- ... -->
    </li>
</ul>

<script>javascript">
    var list = document.querySelector('.nav').children;		// list是导航栏的所有孩子li(此时显示出的只有a标签)
    for (var i = 0; i < list.length; i++) {
        list[i].onmouseover = function() {
            this.children[1].style.display = 'block';		// 光标聚焦,li的第二个孩子,也就是ul显示
        }
        list[i].onmouseout = function() {
            this.children[1].style.display = 'none';		// 光标脱离,li的第二个孩子,也就是ul隐藏
        }
    }
    // 其实这里用到了一个小细节:li的第二个孩子(ul),在display:none时,光标聚焦是忽视它的(相当于完全没有)
</script>
/*
关于css多说几句。这是我的css写法:
大的li只设置左浮动就可以; a中设置block,宽,高,背景颜色等,撑开每个li;
接下来什么都不用管,因为在html中隐藏的ul>li结构直接就是标准流,即a标签的下方,不用我们多操心
*/

 
发布留言板

<!-- 核心思路:点击按钮后,动态创建一个li,添加到ul里 -->
<!-- 创建li的同时,把文本域的内容(value)通过li.innerHTML赋给li -->

<textarea name="" id="" cols="30" rows="10"></textarea>
<button>发布</button>
<ul></ul>

<script>javascript">
    // 获取元素
    var text = document.querySelector('textarea');
    var btn = document.querySelector('button');
    var ul = document.querySelector('ul');
    // 注册事件
    btn.onclick = function() {
        if (text.value == '') {			// 如果留言为空,弹出alert
            alert('您没有输入内容');
            return false;
        } else {
            // 创建元素节点
            var li = document.createElement('li');
            li.innerHTML = text.value;	// innerHTML是可读可写的;注意这里的li是对象名而不是标签名了
            // 添加元素
            ul.insertBefore(li, ul.children[0])     // 留言每次都发到最前面
        }
    }
</script>

 
发布留言板2(可删除留言)
在这里插入图片描述

javascript">// 上面代码中else的内容扩展为:

// 创建元素节点
var li = document.createElement('li');
li.innerHTML = text.value + "<a href='javascript:;'>删除</a>";	// javascript:void(0)和javascript:;的效果一样,即禁用该链接
// 添加元素
ul.insertBefore(li, ul.children[0]) // 留言每次都发到最前面
// 删除留言
var dels = document.querySelectorAll('a');
for (var i = 0; i < dels.length; i++) {
    dels[i].onclick = function() {
         ul.removeChild(this.parentNode);	// 关键:此时的this是某个a的对象,触发后直接删除整个父亲
    }
}
// 这个获取元素和for循环注册事件的操作,必须和添加a的操作在同一作用域内 —— 保证dels能获取到全部的a

 
动态表格
在这里插入图片描述

<table cellspacing="0">
    <thead>
        <tr>
            <th>姓名</th>
            <th>科目</th>
            <th>成绩</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
     
    </tbody>
</table>
<script>javascript">
    // 模拟从数据库获取的数据
    var datas = [{
        name: 'loli1',
        subject: 'Java',
        score: 99
    }, {
        name: 'loli2',
        subject: 'Java',
        score: 93
    }, {
        name: 'loli1',
        subject: 'Java',
        score: 88
    }];
    // 往tbody里创建行
    var tbody = document.querySelector('tbody');
    for (var i = 0; i < datas.length; i++) {
        // 创建行
        var tr = document.createElement('tr');
        tbody.appendChild(tr);
        // 行里创建单元格
        for (var k in datas[i]) {
            var td = document.createElement('td');
            td.innerHTML = datas[i][k];
            tr.appendChild(td);
        }
        // 补上最后的"删除"键单元格
        var td = document.createElement('td');
        td.innerHTML = '<a href="javascript:;">删除</a>';
        tr.appendChild(td);
    }
    // 控制删除
    var delList = document.querySelectorAll('a');
    for (var i = 0; i < delList.length; i++) {
        delList[i].onclick = function() {
            tbody.removeChild(this.parentNode.parentNode);
        }
    }
</script>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

☀ Loli & JS

♫ Suki


http://www.niftyadmin.cn/n/1330550.html

相关文章

无线地磁传感器更适合路边停车系统

随着停车难问题日益严重&#xff0c;在有限的固定停车场外&#xff0c;路边停车就成为当下很常见的一种停车方式&#xff0c;早起国外采用电感线圈来作为车位的传感器&#xff0c;国内比较少见&#xff0c;而我国直接跨过了电感线圈&#xff0c;直接采用了无线地磁传感器作为车…

【Web API】DOM事件高级

▊ 注册事件的两种方式 传统注册方式(前一阶段主要使用的)&#xff1a; 通常利用on开头的时间注册事件的唯一性&#xff1a;同一个元素同一个事件只能设置一个处理函数&#xff0c;后边会覆盖前面的 方法监听注册方式 利用addEventListener()方法同一个元素同一个事件可以注…

智慧农业控制系统的可应用范围

智慧农业控制系统可以科学化、智能化的监测和管理农业&#xff0c;可以通过平台查看数据并进行数据分析&#xff0c;实现综合性、灵活性、实时性的分析统计&#xff0c;并提供监测、预防、数据分析、数据应用、远程诊断等服务&#xff0c;实现农业智能化管理。 智慧农业控制系…

【LeetCode】Sama的个人记录_18

【Q990】(md) 等式方程的可满足性 给定一个由表示变量之间关系的字符串方程组成的数组&#xff0c;每个字符串方程 equations[i] 的长度为 4&#xff0c;并采用两种不同的形式之一&#xff1a;“ab” 或 “a!b”。在这里&#xff0c;a 和 b 是小写字母&#xff08;不一定不同…

城市路边停车系统优势分析

城市路边停车管理系统可对城市的道路、交通、停车进行统一的规划、优化和管理&#xff0c;充分挖掘城市停车资源&#xff0c;可以科学合理的利用路边的停车资源&#xff0c;并通过路边停车资源的收费实现资源优化配置&#xff0c;为动态交通静态交通提供方便、有效的服务&#…

节能管理系统有哪些平台

通过深入研究能源的发生、输送、使用、转换各个环节的详细过程&#xff0c;并且应用先进的传感器技术、通信技术、数据分析技术&#xff0c;打造节能系统解决方案&#xff0c;可应用于各类应用场景。 1、能源管理平台 用于能源使用单位进行能源管理活动的信息化平台&#xff…

【Web API】BOM事件

▊ BOM概述 提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是window 不像DOM那样是W3C的标准规范&#xff0c;兼容性较差 BOM是包含DOM的&#xff0c;window包含document, location, navigation,screen, history ▊ 关于window window是浏览器的顶级…

【LeetCode】Sama的个人记录_19

【Q739】(md) 每日温度 请根据每日 气温列表&#xff0c;重新生成一个列表。对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;给定一个列表 temperatur…