[前端] todoList制作

知识点回顾

  1. 后代选择器 可以使用多个选择器每个选择器之间用空格分开。只要是后代就会被选择如
html 复制代码
<style>
	div a{
		color: red;
	}
</style>
<div>
	<a href="">我是儿子</a>
	<p>
		<a href="">我是孙子</a>
	</p>
</div>

此时两个超链接都会变色

  1. 子代选择器 可以使用多个选择器每个选择器之间用 > 分割。只有子代才会被选择
html 复制代码
<style>
	div>a{
		color: red;
	}
</style>
<div>
	<a href="">我是儿子</a>
	<p>
		<a href="">我是孙子</a>
	</p>
</div>

第一个超链接才会变成红色

  1. 如何去除html自带的 li 的样式
html 复制代码
li {
	list-style:none;
}
  1. 如果一个div盒子有高度,如何让里面的文字垂直居中
html 复制代码
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>测试input checkbox的label</title>
    <style>
        div{
            height: 40px;
            border: 1px solid pink;
            line-height: 40px;
        }
    </style>
</head>
<body>
    <div>真的笑不出来了</div>
    <script>
    </script>
</body>
</html>

使用 line-height 即可。

  1. 插入一个节点,使用document.createElement("<tagName>") 使用 append 表示在尾后插入一个子节点,使用prepend 表示在头部插入一个子节点。
    after 则是在这个节点后插入一个兄弟节点,before 则是在这个节点前面插入一个兄弟节点。删除节点很爽不需要知道这个节点的父节点是什么直接调用remove()方法即可。
html 复制代码
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>插入删除节点例子</title>
</head>
<body>
    <button id="id_btn_add">点击增加节点</button>
    <button id="id_btn_delete">点击删除节点(删除年级)</button>
    <ul>
        <li>一年级
            <ul>
                <li>小明</li>
                <li>小红</li>
            </ul>
        </li>
        <li>二年级
            <ul>
                <li>老王</li>
                <li>杰哥</li>
            </ul>
        </li>
    </ul>
    <script>
        let btnAdd = document.querySelector("#id_btn_add");
        btnAdd.addEventListener("click", e => {
            let ulEle = document.querySelector("body>ul");
            let liEle = document.createElement("li");
            liEle.innerHTML = '三年级<ul><li>翠翠</li><li>兰兰</li></ul>';
            ulEle.append(liEle);

            let test = document.querySelectorAll("body>ul>li");
            let grandLiEle = test[0].querySelectorAll("ul>li")[0];
            let newLiEle = document.createElement("li");
            newLiEle.innerHTML = "八戒";
            grandLiEle.after(newLiEle);
        });

        let btnDele = document.querySelector("#id_btn_delete");
        btnDele.addEventListener("click", e => {
            let liNodeList = document.querySelectorAll("body>ul>li");
            if(liNodeList.length > 0){
                liNodeList[liNodeList.length - 1].remove();
            }else{
                alert("没有元素可以删除了");
            }
        });
    </script>
</body>
</html>
  1. 事件的冒泡,冒泡这个特性还是经常用到的,真正产生事件的html元素通过 event.target来获取。获取到对应的html元素后,就可以有很多操作了,如 parentNode 来获取该元素的父亲元素。nodeName 来获取节点名称等等
html 复制代码
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件的冒泡</title>
    <style>
        div{
            height: 60px;
            border: 1px solid pink;
        }
    </style>
</head>
<body>
    <div class="wrapper" id="id_box">
        <ul>
            <li>我是小明</li>
        </ul>
    </div>
    <script>
        let divEle = document.querySelector("#id_box");
        divEle.addEventListener("click", event => {
            console.log(event.target);
        });
    </script>
</body>
</html>
  1. html中并没有什么直接方法来获取 ul 或者 ol 下面 li的数量。还是得通过querySelectorAll()接口来获取
html 复制代码
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件的冒泡</title>
    <style>
        div{
            height: 60px;
            border: 1px solid pink;
        }
    </style>
</head>
<body>
    <button id="id_btn">获取li的数量</button>
    <ul>
        <li>小红</li>
        <li>大白</li>
        <li>丽丽</li>
    </ul>
    <script>
        let btnEle = document.querySelector("#id_btn");
        let ulEle = document.querySelectorAll("body>ul>li");
        btnEle.addEventListener("click", event => {
            console.log(ulEle.length);
        });
    </script>
</body>
</html>
  1. 正则表达式向后向前环视,(首先书上写JavaScript不支持环视,但是现在JavaScript是支持的)。
html 复制代码
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>正则表达式环视</title>
    <style>
        div{
            height: 60px;
            border: 1px solid pink;
        }
    </style>
</head>
<body>
    <script>
        let str = "已完成8/全部10";
        let str1 = "https://www.forta.com";
        let complete = str.match(/(?<=已完成)[0-9]+/);
        let total = str1.match(/\w+(?=:)/);
        console.log(complete[0]);
        console.log(total[0]);
    </script>
</body>
</html>

环视挺好用的

相关推荐
C_心欲无痕21 分钟前
nginx - alias 和 root 的区别详解
运维·前端·nginx
我是苏苏3 小时前
Web开发:C#通过ProcessStartInfo动态调用执行Python脚本
java·服务器·前端
无羡仙3 小时前
Vue插槽
前端·vue.js
哈__3 小时前
React Native 鸿蒙跨平台开发:PixelRatio 像素适配
javascript·react native·react.js
用户6387994773054 小时前
每组件(Per-Component)与集中式(Centralized)i18n
前端·javascript
SsunmdayKT4 小时前
React + Ts eslint配置
前端
开始学java4 小时前
useEffect 空依赖 + 定时器 = 闭包陷阱?count 永远停在 1 的坑我踩透了
前端
zerosrat4 小时前
从零实现 React Native(2): 跨平台支持
前端·react native
狗哥哥4 小时前
🔥 Vue 3 项目深度优化之旅:从 787KB 到极致性能
前端·vue.js