欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript表单元素获取及dom元素的操作学习

程序员文章站 2022-05-16 21:27:04
...

一. 优雅的获取表单元素

示例代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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. <style>
  9. #login {
  10. margin-bottom: 2em;
  11. }
  12. .login {
  13. width: 15em;
  14. border: 1px solid #888;
  15. border-radius: 0.5em;
  16. box-shadow: 5px 5px 5px #888;
  17. display: grid;
  18. grid-template-columns: 3em 1fr;
  19. gap: 0.5em 1em;
  20. }
  21. .login legend {
  22. padding: 0 0.5em;
  23. text-align: center;
  24. margin-bottom: 0.5em;
  25. font-weight: bolder;
  26. }
  27. .login button {
  28. grid-column: 2;
  29. }
  30. .login button:hover {
  31. cursor: pointer;
  32. background-color: lightcyan;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <form action="login.php" method="post" id="login">
  38. <fieldset class="login">
  39. <legend>表单1</legend>
  40. <label for="email">邮箱:</label>
  41. <input type="email" name="email" id="email" value="admin@php.cn" autofocus />
  42. <label for="password">密码:</label>
  43. <input type="password" name="password" id="password" value="123456" />
  44. <button>提交</button>
  45. </fieldset>
  46. </form>
  47. <form action="login.php" method="post" id="login1">
  48. <fieldset class="login">
  49. <legend>表单2</legend>
  50. <label for="email">邮箱:</label>
  51. <input type="email" name="email" id="email" value="admin@php.cn" autofocus />
  52. <label for="password">密码:</label>
  53. <input type="password" name="password" id="password" value="123456" />
  54. <button>提交</button>
  55. </fieldset>
  56. </form>
  57. <script>
  58. // 使用document.forms可获取页面所有表单
  59. // 通过form表单的id或索引[]获取指定的表单
  60. console.log(document.forms);
  61. console.log(document.forms.login);
  62. console.log(document.forms[1]);
  63. // 获取表单内的元素,可通过元素的name值来获取:forms.表单id.元素name
  64. console.log(document.forms.login.email);
  65. console.log(document.forms.login.password);
  66. // 获取表单中元素的值
  67. console.log(document.forms.login.email.value);
  68. </script>
  69. </body>
  70. </html>
示例图:

JavaScript表单元素获取及dom元素的操作学习

二. dom树的遍历与常用属性

示例代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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. <ol class="list">
  11. <li class="item1">item</li>
  12. <li class="item2">item</li>
  13. <li class="item3">item</li>
  14. <li class="item4">item</li>
  15. <li class="item5">item</li>
  16. </ol>
  17. <script>
  18. // 获取整个list元素
  19. let ol = document.querySelector(".list");
  20. console.log(ol);
  21. //获取所有子节点元素:使用children获取到的结果是一个元素集合。
  22. let child = ol.children;
  23. console.log(child);
  24. // 将元素集合转成数组
  25. // Array.from()
  26. console.log(Array.from(ol.children));
  27. // ...rest
  28. console.log([...ol.children]);
  29. // 遍历
  30. //第一个, firstElementChild
  31. console.log([...ol.children][0]);
  32. [...ol.children][0].style.color = "blue";
  33. ol.firstElementChild.style.background = "yellow";
  34. // 下一个兄弟, 第2个, nextElementSibling
  35. ol.firstElementChild.nextElementSibling.style.background = "green";
  36. // 最后一个, lastElementChild
  37. ol.lastElementChild.style.background = "yellow";
  38. // 前一个兄弟, previousElementSibling
  39. ol.lastElementChild.previousElementSibling.style.background = "lightgreen";
  40. // 父节点/元素节点, parentElment / parentNode
  41. ol.lastElementChild.parentNode.style.border = "1px solid red";
  42. </script>
  43. </body>
  44. </html>
示例图:

JavaScript表单元素获取及dom元素的操作学习

三.dom元素的增删改操作

示例代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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 ul = document.createElement("ul");
  13. //给ul插入内联css
  14. ul.style.border = "1px solid";
  15. //给ul插入指向样式
  16. ul.className = "content";
  17. // 2. 添加到页面中/html中: append
  18. document.body.append(ul);
  19. // 3. 为ul列表添加元素
  20. for (let i = 0; i < 5; i++) {
  21. const li = document.createElement("li");
  22. li.textContent = "item" + (i + 1);
  23. ul.append(li);
  24. }
  25. // 4.查看元素
  26. console.log(ul);
  27. // outerHTML: 元素的html字符串表示
  28. console.log(ul.outerHTML);
  29. // 5. 在节点之前插入: before
  30. const li = document.createElement("li");
  31. li.textContent = "商品";
  32. li.style.color = "red";
  33. //在第4个元素前面插入新建的元素
  34. //先获取第4个元素
  35. const four = document.querySelector("ul li:nth-of-type(4)");
  36. //插入
  37. four.before(li);
  38. // 6. 在节点之后插入 : after
  39. // cloneNode(true): 克隆节点, true, 复制元素后代的内容
  40. let cloneLi = li.cloneNode(true);
  41. //插入
  42. four.after(cloneLi);
  43. // 7. 在父节点的标签为插入点,进行插入元素
  44. // insertAdjacentElement('插入位置', 元素)
  45. // 插入位置有四个
  46. // afterBegin: 开始标签之后,第一个子元素
  47. // beforeBegin: 开始标签之前,是它的前一个兄弟元素
  48. // afterEnd: 结束标签之后,它的下一个兄弟元素
  49. // beforeEnd: 结束标签之前,它的最后一个子元素
  50. const h3 = document.createElement("h3");
  51. h3.textContent = "商品列表";
  52. ul.insertAdjacentElement("beforeBegin", h3);
  53. const p = document.createElement("p");
  54. p.textContent = "共计: 7 件";
  55. ul.insertAdjacentElement("afterEnd", p);
  56. // 8. 替换元素 replaceChild
  57. // 1. 插入的元素
  58. const a = document.createElement("a");
  59. a.href = "https://php.cn";
  60. a.textContent = "php.cn";
  61. // 2. 执行替换第二个元素
  62. const last = ul.lastElementChild;
  63. ul.replaceChild(a, last);
  64. // 9. 移除: removex
  65. //ul.lastElementChild.remove(last);
  66. </script>
  67. </body>
  68. </html>
示例图:

JavaScript表单元素获取及dom元素的操作学习

四.js操作元素内容的几个常用方法

示例代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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. h2 {
  13. color: red;
  14. }
  15. </style>
  16. <h2>通知</h2>
  17. <span style="display: none">试用期员工不参加</span>
  18. <p>今天下午17:00开会, 开发部, 运营部全体参加~~</p>
  19. </div>
  20. <script>
  21. const box = document.querySelector(".box");
  22. // textContent: 返回元素以及后代元素中的所有文本内容,包括 <style>, display:none的内容
  23. console.log(box.textContent);
  24. // innerText: 返回元素以及后代中的文本
  25. console.log(box.innerText);
  26. // innerHTML: 返回内部的html字符串
  27. console.log(box.innerHTML);
  28. // outerHTML: 返回当前节点的自身的html字符串
  29. console.log(box.outerHTML);
  30. </script>
  31. </body>
  32. </html>
示例图:

JavaScript表单元素获取及dom元素的操作学习

五.将留言板的实战案例进行仿写,加上一些样式

示例代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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. <style>
  9. * {
  10. padding: 0;
  11. margin: 0;
  12. box-sizing: border-box;
  13. }
  14. .content {
  15. width: 20em;
  16. height: 3em;
  17. border: 2px solid green;
  18. padding: 0 20px;
  19. border-radius: 20px;
  20. }
  21. ul {
  22. list-style: none;
  23. background-color: yellowgreen;
  24. width: 16.8em;
  25. margin: -1em 0 0 1em;
  26. border-radius: 20px;
  27. overflow: hidden;
  28. }
  29. li {
  30. height: 2.2em;
  31. line-height: 2.2em;
  32. border-bottom: 1px dashed rgb(253, 253, 253);
  33. padding-left: 1em;
  34. }
  35. input {
  36. margin: 2em 1em;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <!-- onkeydown: 按下键时触发 -->
  42. <input class="content" type="text" onkeydown="addMsg(this)" placeholder="请输入留言内容" autofocus />
  43. <ul class="list"></ul>
  44. <script>
  45. function addMsg(ele) {
  46. // 判断按键,如果是回车键则执行添加留言
  47. if (event.key === "Enter") {
  48. // 1. 获取留言列表的容器
  49. const ul = document.querySelector(".list");
  50. // 2. 判断留言是否为空?
  51. if (ele.value.length === 0) {
  52. alert("留言内容不能为空");
  53. ele.focus();
  54. return false;
  55. }
  56. // 3. 添加一条新留言
  57. const li = document.createElement("li");
  58. // 添加删除留言功能
  59. li.innerHTML = ele.value + "<button onclick='del(this.parentNode)'>删除</button>";
  60. // 根据留言规则,最新的一条显示在最上面
  61. ul.insertAdjacentElement("afterBegin", li);
  62. // 4. 清空留言的输入框,为下一次做准备
  63. ele.value = null;
  64. // 5. 重置焦点到留言框中,方便用户更次输入
  65. ele.focus();
  66. }
  67. }
  68. // 删除功能
  69. function del(ele) {
  70. return confirm("是否删除?") ? ele.remove() : false;
  71. }
  72. </script>
  73. </body>
  74. </html>
示例图:

JavaScript表单元素获取及dom元素的操作学习

六.dataset对象

元素属性有二类:
  1. 内置的预定义属性, 如 id, class,title,style等
  2. 用户自定义属性,主要用于js脚本控制, 以 “data-“”为前缀,如 data-key
  1. <div class="btn-group">
  2. <!-- onclick: 内置/预定义事件属性 -->
  3. <!-- data-index: 自定义属性 -->
  4. <button data-index="1" onclick="getIndex(this)">btn1</button>
  5. <button data-index="2" onclick="getIndex(this)">btn2</button>
  6. <button data-index="3" onclick="getIndex(this)">btn3</button>
  7. </div>
  8. <script>
  9. function getIndex(btn) {
  10. // 通过自定义属性data-index的值,知道我点的是哪一个?
  11. // dataset.prop, "data-"一定要省略掉
  12. console.log("点击了第 ", btn.dataset.index, " 个按钮");
  13. }
  14. </script>
  15. <!-- 自定义属性还可以将一些数据保存到标签中 -->
  16. <!-- data-emial, data-work-unit -->
  17. <div class="user" data-email="88888@qq.com" data-work-unit="">老师</div>
  18. <script>
  19. const user = document.querySelector(".user");
  20. console.log(user.dataset.email);
  21. console.log(user.dataset.workUnit);
  22. </script>

七.获取元素的计算样式

示例代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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. <style>
  9. .box {
  10. width: 150px;
  11. height: 100px;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <div class="box" style="color: green; background-color: lightblue">Hello World!</div>
  17. <script>
  18. const div = document.querySelector("div");
  19. // 行内样式,style
  20. console.log(div.style.color);
  21. console.log(div.style.backgroundColor);
  22. // 计算样式: 内部<style>或外部 如 style.css
  23. console.log(window.getComputedStyle(div).width);
  24. console.log(window.getComputedStyle(div).height);
  25. console.log(window.getComputedStyle(div).backgroundColor);
  26. </script>
  27. </body>
  28. </html>
示例图:

JavaScript表单元素获取及dom元素的操作学习

八.classList 对象常用方法

示例代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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. <style>
  9. .red {
  10. color: red;
  11. }
  12. .bgc {
  13. background-color: yellow;
  14. }
  15. .blue {
  16. color: blue;
  17. }
  18. .bd {
  19. border: 5px solid #000;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <h2>hello</h2>
  25. <script>
  26. const h2 = document.querySelector("h2");
  27. // add: 添加class,可以叠加
  28. h2.classList.add("red"); // color: red;
  29. h2.classList.add("bgc"); //background-color: yellow;
  30. // remove: 移除class
  31. //h2.classList.remove("bgc");
  32. // replace: 替换class
  33. //h2.classList.replace("red", "blue");
  34. // toggle: 切换 class
  35. // 如果已存在 bd, 则执行remove 移除操作, 否则执行 add 添加操作
  36. h2.classList.toggle("bd");
  37. </script>
  38. </body>
  39. </html>
示例图:

JavaScript表单元素获取及dom元素的操作学习

九.事件的添加与派发

示例代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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. // 1.先获取元素,然后通过元素.onclick(){}进行添加
  15. const btn1 = document.querySelector("button:first-of-type");
  16. btn1.onclick = function() {
  17. console.log(event);
  18. };
  19. // 删除事件:null
  20. // btn1.onclick = null;
  21. // 2.事件监听器
  22. const btn2 = document.querySelector("button:nth-of-type(2)");
  23. function show() {
  24. console.log(event);
  25. }
  26. // 事件回调方法不能移除,必须是命名函数才可以
  27. btn2.addEventListener("click", show, false);
  28. // 移除事件
  29. //btn2.removeEventListener("click", show, false);
  30. //3.事件派发
  31. const btn3 = document.querySelector("button:nth-of-type(3)");
  32. // 先添加一个事件,然后自动去的触发它
  33. let i = 0;
  34. btn3.addEventListener(
  35. "click",
  36. () => {
  37. console.log("恭喜你,又赚了 : " + i + "元");
  38. i += 0.8;
  39. },
  40. false
  41. );
  42. // 创建一个自定义事件
  43. const myclick = new Event("click");
  44. setInterval(() => btn3.dispatchEvent(myclick), 2000);
  45. </script>
  46. </body>
  47. </html>