ASCII码 ASCII码

JS获取表单元素、dom树遍历增删改、操作元素内容、自定义属性、操作css、事件小结

发布于:2022-01-19 09:06:45  栏目:技术文档
  1. 实例演示如何正确优雅的获取表单元素 2. 实例演示dom树的遍历与常用属性 3. 实例演示dom元素的增删改操作 4. js操作元素内容的几个常用方法,并分析异同 5. 将留言板的实战案例进行仿写,加上一些样式 6. 实例演示 dataset对象 7. 实例演示如何获取元素的计算样式 8. 实例演示 classList 对象常用方法 9. 实例演示事件的添加与派发

1. 获取表单元素

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>获取表单元素</title>
  8. </head>
  9. <body>
  10. <style>
  11. .form {
  12. width: 20em;
  13. display: grid;
  14. grid-template-columns: 1fr;
  15. gap: 0.5em 1em;
  16. }
  17. input {
  18. text-align: center;
  19. }
  20. </style>
  21. <form class="form" id="form">
  22. <input type="text" name="user" placeholder="输入用户名" />
  23. <input type="text" name="pass" placeholder="输入密码" />
  24. <button>提交</button>
  25. <script>
  26. // 传统获取方式:上一课讲的两个API
  27. // 获取表单
  28. let form = document.querySelector(".form");
  29. // 获取用户
  30. let user = document.querySelector("input[name='user']");
  31. // 获取密码
  32. let pass = document.querySelector("input[name='pass']");
  33. console.log(form);
  34. console.log(user);
  35. console.log(pass);
  36. // 推荐方式:用document.forms属性.name属性值(或id值)
  37. user = document.forms.form.user;
  38. pass = document.forms.form.pass;
  39. user.value = "超人";
  40. pass.value = "123456789";
  41. // 前后端数据交互、
  42. form = document.forms.form;
  43. user = form.user.value;
  44. pass = form.pass.value;
  45. // 转为json
  46. let users = { user, pass };
  47. // 用函数转为json字符串
  48. let data = JSON.stringify(users);
  49. console.log(data);
  50. </script>
  51. </form>
  52. </body>
  53. </html>

2. dom树的遍历

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>遍历DOM树</title>
  8. </head>
  9. <body>
  10. <ul class="list">
  11. <li class="item">项目1</li>
  12. <li class="item">项目2</li>
  13. <li class="item">项目3</li>
  14. <li class="item">项目4</li>
  15. <li class="item">项目5</li>
  16. <li class="item">项目6</li>
  17. </ul>
  18. <script>
  19. // 1. 节点类型:元素、文本、属性、注释、文档
  20. // 通常只关注元素类型
  21. let Ul = document.querySelector(".list");
  22. let items = Ul.children;
  23. // 上条获得的items类型是HTMLCollection
  24. // 获得的是类数组,不是数组,不能用数组的方法
  25. // 类数组特征:
  26. // 有从0开始递增的正整数索引
  27. // 有length属性
  28. console.log(items);
  29. // 2. 转化为真数组
  30. // 2.1 用函数转化
  31. let Li = Array.from(items);
  32. // 现在items类型是Array数组了,可以用数组的方法引用
  33. console.log(Li);
  34. // 2.2 用...rest转化
  35. let Li_items = [...items];
  36. console.log(Li_items);
  37. Li[0].style.fontSize = "3em";
  38. // 3. 用语法糖遍历
  39. // 第一个子元素
  40. Ul.firstElementChild.style.color = "red";
  41. // 下一个兄弟元素
  42. Ul.firstElementChild.nextElementSibling.style.color = "blue";
  43. // 最后一个子元素
  44. Ul.lastElementChild.style.fontSize = "2em";
  45. // 前一个兄弟元素
  46. Ul.lastElementChild.previousElementSibling.style.color = "red";
  47. </script>
  48. </body>
  49. </html>
  • 我个人觉得数组好用,老师说语法糖比较优雅

3. dom元素的增删改

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>dom元素的增删改</title>
  8. </head>
  9. <body>
  10. <script>
  11. // 1. 创建元素
  12. const h3 = document.createElement("h3");
  13. // 2.添加到页面中
  14. document.body.append(h3);
  15. h3.textContent = "创建的元素";
  16. // 创建ul元素
  17. const ul = document.createElement("ul");
  18. document.body.append(ul);
  19. // 创建列表项
  20. for (i = 0; i < 6; i++) {
  21. const li = document.createElement("li");
  22. li.textContent = "项目" + (i + 1);
  23. ul.append(li);
  24. }
  25. console.log(ul);
  26. console.log(ul.outerHTML);
  27. // 3. 插入节点
  28. // 示例:在第四个节点前后插入列表项
  29. const li = document.createElement("li");
  30. // 设置列表内容和样式
  31. li.textContent = "新的项目";
  32. li.style.fontSize = "3em";
  33. // 获取第四个节点
  34. const li_four = document.querySelector("li:nth-of-type(4)");
  35. // 在节点前插入新列表项
  36. li_four.before(li);
  37. // 克隆列表,用colenNode方法,true复制后代内容,即文本
  38. const li_copy = li.cloneNode(true);
  39. // 在节点后插入
  40. li_four.after(li_copy);
  41. // 以父节点标签为插入点,进行插入元素示例
  42. // 语法:insertAdjacentElement('插入位置',元素)
  43. // 插入位置有四个:可以不分大小写
  44. // afterBegin:开始标签后的第一个子元素
  45. // beforeBegin:开始标签之前的兄弟元素
  46. // afterEnd:结束标签之后的兄弟元素
  47. // beforeEnd:结束标签之前的子元素
  48. // 例:在上面列表前插入h4
  49. const h4 = document.createElement("h4");
  50. h4.textContent = "新列表";
  51. ul.insertAdjacentElement("beforebegin", h4);
  52. // 例:在列表后插入p
  53. const p = document.createElement("p");
  54. p.textContent = "共计8个项目";
  55. ul.insertAdjacentElement("afterEnd", p);
  56. // 4. 替换节点语法: replaceChild(新节点,替换的节点)
  57. // 获取要替换的节点
  58. const li_replace = document.querySelector("li:nth-of-type(8)");
  59. // 创建要替换的元素
  60. const a = document.createElement("a");
  61. a.textContent = "php.cn";
  62. a.href = "https://php.cn";
  63. // 调用函数替换
  64. ul.replaceChild(a, li_replace);
  65. // 5. 删除节点:获取要删除的节点,使用 remove()方法
  66. document.querySelector("li:nth-of-type(7)").remove();
  67. </script>
  68. </body>
  69. </html>

4. js操作元素内容

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>js操作元素内容</title>
  8. </head>
  9. <body>
  10. <div class="box">
  11. <style>
  12. h3 {
  13. color: crimson;
  14. }
  15. </style>
  16. <h3>聚餐通知</h3>
  17. <p>公司全体员工:</p>
  18. <p>今天晚上全体在食堂聚餐,加菜,全羊宴!</p>
  19. </div>
  20. <script>
  21. // 查看元素内容textContent、innerHtml、innerText的不同
  22. const div = document.querySelector(".box");
  23. // textContent:返回元素及后代元素中所有文本内容,包括h3样式的内容
  24. console.log(div.textContent);
  25. // innerHTML:返回文本内容包含标签字符串
  26. console.log(div.innerHTML);
  27. // innerText:只返回元素以及后代中的文本
  28. console.log(div.innerText);
  29. // outerHTML:返回当前节点的html字符串
  30. console.log(div.outerHTML);
  31. // 小结:首选textContent
  32. // 清空
  33. div.outerHTML = null;
  34. </script>
  35. </body>
  36. </html>

5. DOM实战:留言板

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>DOM实战:留言板</title>
  8. </head>
  9. <body>
  10. <style>
  11. input {
  12. width: 30em;
  13. height: 1.5rem;
  14. }
  15. li {
  16. margin: 0.4em;
  17. }
  18. </style>
  19. <!-- 按下键时触发 -->
  20. <input type="text" placeholder="输入留言" onkeydown="addMsg(this)" />
  21. <hr />
  22. <p>留言:</p>
  23. <ul class="msgList"></ul>
  24. <script>
  25. // 定义触发函数,接收传递的元素
  26. function addMsg(inputText) {
  27. // 判断按下的键是否是回车,回车就记录输入的留言。
  28. // 用event对象的key值是否是“enter”判断
  29. // event对象包含当前事件的所有信息,是当前事件的对象
  30. if (event.key === "Enter") {
  31. // 判断留言是否为空。这个判断语句不完善,根据长度判断也不完善
  32. if (inputText.value === "") {
  33. alert("留言不能为空");
  34. // 重新激活输入框
  35. inputText.focus();
  36. return false;
  37. }
  38. // 获取留言列表
  39. const ul_Msg = document.querySelector(".msgList");
  40. // 添加留言,带删除按键,调用删除函数。
  41. const li = document.createElement("li");
  42. li.innerHTML = `${inputText.value}<button onclick="del(this.parentNode)">删除</button>`;
  43. // 留言添加到ul开始元素后面,这样确保最新留言在最前
  44. ul_Msg.insertAdjacentElement("afterbegin", li);
  45. // 清空留言框
  46. inputText.value = null;
  47. // 重新激留言框
  48. inputText.focus();
  49. }
  50. }
  51. // 定义删除函数,接收传递的li删除
  52. function del(li_del) {
  53. // 删除前用户确认,用函数confirm("提示信息")
  54. // 点确定返回true,点取消返回false
  55. return confirm("是否删除此留言?") ? li_del.remove() : false;
  56. }
  57. </script>
  58. </body>
  59. </html>

6. 自定义属性: dataset对象

元素属性有二类:

  • 内置的预定义属性, 如 id, class,title,style等
  • 用户自定义属性,主要用于js脚本控制, 以 “data-“”为前缀,如 data-key
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8" />
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    7. <title>自定义属性: dataset对象</title>
    8. </head>
    9. <body>
    10. <!-- 根据按钮显示自定义属性的值 -->
    11. <div class="btn-group">
    12. <!-- 用data-value自定义属性存放值 -->
    13. <button data-index-value="1号" onclick="getValue(this)">按键1</button>
    14. <button data-index-value="2号" onclick="getValue(this)">按键2</button>
    15. <button data-index-value="3号" onclick="getValue(this)">按键3</button>
    16. </div>
    17. <p data-value="php.cn"></p>
    18. <script>
    19. function getValue(value) {
    20. // 自定义属性使用dataset.属性名调用
    21. // 属性名有-符号时改为驼峰写法
    22. alert(`点击的是${value.dataset.indexValue}按钮`);
    23. }
    24. // 自定义属性可读可写
    25. const p = document.querySelector("p");
    26. p.dataset.value = "php中文网";
    27. console.log(p.dataset.value);
    28. </script>
    29. </body>
    30. </html>

7. js操作css

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>js操作css</title>
  8. </head>
  9. <body>
  10. <style>
  11. div {
  12. width: 20em;
  13. }
  14. </style>
  15. <div style="font-size: 2em; color: chocolate"></div>
  16. <script>
  17. let div = document.querySelector("div");
  18. // 获取行内样式
  19. console.log(div.style.fontSize);
  20. // 计算样式:指内部style标签样式或外部css文件样式
  21. // 获取外部样式,用全局方法window.getComputedStyle(标签,伪元素)
  22. console.log(window.getComputedStyle(div).width);
  23. // 操作:宽度加100px
  24. let width = window.getComputedStyle(div).width;
  25. // 得到的宽度是字符串,用parseInt()函数提取出数字
  26. width = parseInt(width) + 100 + "px";
  27. // 在行内样式中加入样式
  28. div.style.width = width;
  29. console.log(div.style.width);
  30. </script>
  31. </body>
  32. </html>

8. js操作class属性: classList对象

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>js操作class属性: classList对象</title>
  8. </head>
  9. <body>
  10. <h2>学习php</h2>
  11. <style>
  12. .red {
  13. color: red;
  14. }
  15. .bg-yello {
  16. background-color: yellow;
  17. }
  18. .turquoise {
  19. color: turquoise;
  20. }
  21. </style>
  22. <script>
  23. // 1. 用传统方式添加样式
  24. let h2 = document.querySelector("h2");
  25. h2.className = "red bg-yello";
  26. // 2. 用classList对象
  27. // 添加样式:add方法
  28. h2.classList.add("turquoise");
  29. // 判断样式是否存在:contains方法
  30. console.log(h2.classList.contains("red"));
  31. // 移除样式
  32. h2.classList.remove("bg-yello");
  33. // 替换样式:方法replace(要替换的样式名,替换样式)
  34. h2.classList.replace("turquoise", "red");
  35. // 切换样式:toggle方法
  36. // 如果要切换的样式已存在,则移除,否则添加
  37. // 如red样式上条语句已生效,则下面语句变为移除red样式
  38. h2.classList.toggle("red");
  39. </script>
  40. </body>
  41. </html>

9. 事件的添加与删除

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>事件的添加与删除</title>
  8. </head>
  9. <body>
  10. <button>开始</button>
  11. <button>事件监听</button>
  12. <button>事件派发</button>
  13. <script>
  14. // 获取元素
  15. const btn1 = document.querySelector("button:first-of-type");
  16. // 添加点击事件
  17. btn1.onclick = () => {
  18. console.log(event);
  19. };
  20. // 删除事件
  21. btn1.onclick = null;
  22. // 事件监听器
  23. // 获取元素
  24. const btn2 = document.querySelector("button:nth-of-type(2)");
  25. // 监听事件addEventListener("监听事件",动作,false),false表示冒泡事件
  26. btn2.addEventListener("click", show, false);
  27. // 删除事件
  28. btn2.removeEventListener("click", show, false);
  29. function show() {
  30. console.log(event);
  31. }
  32. // 事件派发:事件发生时,自动触发动作
  33. btn3 = document.querySelector("button:nth-of-type(3)");
  34. // 监听事件,自调用
  35. let i = 0;
  36. btn3.addEventListener(
  37. "click",
  38. () => {
  39. console.log(`点赞${++i}个`);
  40. },
  41. false
  42. );
  43. // 创建自定义事件,通过event对象
  44. const myClick = new Event("click");
  45. // 触发3次自定义事件
  46. btn3.dispatchEvent(myClick);
  47. btn3.dispatchEvent(myClick);
  48. btn3.dispatchEvent(myClick);
  49. // 用一次性定时器触发1500毫秒
  50. setTimeout(() => {
  51. btn3.dispatchEvent(myClick);
  52. }, 1500);
  53. // 用间歇定时器触发
  54. setInterval(() => {
  55. btn3.dispatchEvent(myClick);
  56. }, 1500);
  57. </script>
  58. </body>
  59. </html>
相关推荐
阅读 +