Blogger Information
Blog 18
fans 1
comment 0
visits 12222
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
DOM 元素的增删改查操作 ----0406
木樨
Original
634 people have browsed it

一、快速获取 DOM 元素

1.使用 js 基本语法,仿写 jQuery 的 “$”

  1. <body>
  2. <ul class="list">
  3. <li class="item">item1</li>
  4. <li class="item">item2</li>
  5. <li class="item">item3</li>
  6. <li class="item">item4</li>
  7. <li class="item">item5</li>
  8. </ul>
  9. <script>
  10. // $("body"): jQuery 用这个语法来获取'body'元素
  11. let $ = selector => document.querySelector(selector);
  12. console.log($);
  13. console.log($("body"));
  14. // 设置 body 的背景颜色
  15. $('body').style.background = "lightcyan";
  16. </script>
  17. </body>

2.获取所有满足条件的元素的集合

  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. </ul>
  8. <script>
  9. // 获取满足条件的元素的集合
  10. const items = document.querySelectorAll(".list .item");
  11. // NodeList: 类数组
  12. // 遍历 items 元素
  13. // NodeList有一个forEach()接口
  14. // item: 正在遍历的当前元素,必选
  15. // index: 当前元素的索引
  16. // items: 当前遍历的数组对象
  17. items.forEach(function (item, index, items) {
  18. console.log(item, index, items);
  19. });
  20. // 使用箭头函数简化,以后这个语法使用更多
  21. items.forEach(item => console.log(item));
  22. // 思考:如何获取第一个满足条件的元素?
  23. let firstItem = items[0];
  24. console.log(firstItem);
  25. firstItem.style.background = "lightgreen";
  26. </script>

3.获取满足条件的元素集合中的第一个元素

  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. </ul>
  8. <script>
  9. // 获取满足条件的元素集合中的第一个元素
  10. firstItem = document.querySelector(".list .item");
  11. console.log(firstItem);
  12. firstItem.style.background = "green";
  13. // querySelector()总是返回唯一元素,常用于 id
  14. // querySelectorAll, querySelector, 也可以用在元素上
  15. let list = document.querySelector(".list");
  16. let items = list.querySelectorAll(".item");
  17. console.log(items);
  18. // NodeList它自了一个迭代器接口, for-of 进行遍历
  19. for (let item of items) {
  20. console.log(item);
  21. }
  22. // 以下传统方式, es6 以后不推荐使用
  23. // document.getElementById()
  24. // document.getElementsByTagName()
  25. // document.getElementsByName()
  26. // document.getElementsByClassName()
  27. </script>

4.快速获取一些特定的元素

  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. </ul>
  8. <form action="" name="hello" id="login">
  9. <input type="email" placeholder="demo@email.com" />
  10. <button>提交</button>
  11. </form>
  12. <script>
  13. // 快速获取一些特定的元素
  14. // body
  15. console.log(document.body);
  16. // head
  17. console.log(document.head);
  18. // title
  19. console.log(document.title);
  20. // html
  21. console.log(document.documentElement);
  22. //forms
  23. console.log(document.forms);
  24. console.log(document.forms[0]);
  25. // <form action="" name="hello" id="login">
  26. console.log(document.forms["hello"]);
  27. console.log(document.forms["login"]);
  28. console.log(document.forms.item(0));
  29. console.log(document.forms.item("hello"));
  30. console.log(document.forms.item("login"));
  31. console.log(document.forms.namedItem("hello"));
  32. // forms.id
  33. // 推荐用id,因为id方便添加样式
  34. console.log(document.forms.login);
  35. console.log(document.forms.hello);
  36. </script>

二、DOM 树的遍历和元素的获取

1. 将类数组转为真正的数组类型

  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. <li class="item">item6</li>
  8. </ul>
  9. <script>
  10. // dom树中的所有内容都是:节点
  11. // 节点是有类型的: 元素,文本,文档,属性..
  12. let nodes = document.querySelector(".list");
  13. console.log(nodes.childNodes);
  14. // 通常只关注元素类型的节点
  15. console.log(nodes.children);
  16. let eles = nodes.children;
  17. // 遍历
  18. // 将类数组转为真正的数组类型
  19. console.log([...eles]);
  20. [...eles].forEach(ele => console.log(ele));
  21. // 获取第一个
  22. let firstItem = eles[0];
  23. firstItem.style.background = "yellow";
  24. // 最后一个
  25. // let lastItem = eles[4];
  26. let lastItemIndex = eles.length - 1;
  27. let lastItem = eles[lastItemIndex];
  28. lastItem.style.background = "lightblue";
  29. </script>

2. 使用 js 提供的快捷方式来获取第一个和最后一个

  • firstElementChild 获取第一个
  • lastElementChild 获取最后一个
  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. <li class="item">item6</li>
  8. </ul>
  9. <script>
  10. // js提供一些快捷方式来获取第一个和最后一个
  11. const list = document.querySelector(".list");
  12. firstItem = list.firstElementChild;
  13. firstItem.style.background = "seagreen";
  14. lastItem = list.lastElementChild;
  15. lastItem.style.background = "yellow";
  16. console.log(eles.length);
  17. console.log(list.childElementCount);
  18. </script>

3. 兄弟节点的获取

  • nextElementSibling 下一个兄弟节点
  • previousElementSibling 前一个兄弟节点
  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. <li class="item">item6</li>
  8. </ul>
  9. <script>
  10. // 如何想获取第二个元素怎么办?
  11. // 第二个元素就是第一个元素的下一个兄弟节点
  12. let secondItem = firstItem.nextElementSibling;
  13. secondItem.style.background = "red";
  14. // 获取第5个, 是最后一个元素的前一个兄弟节点
  15. let fiveItem = lastItem.previousElementSibling;
  16. fiveItem.style.background = "cyan";
  17. </script>

三、DOM 树元素的增删改查

1.创建 DOM 元素,并添加到页面显示

  1. // 创建dom元素
  2. let div = document.createElement("div");
  3. let span = document.createElement("span");
  4. span.textContent = "hello";
  5. // append(ele,'text'),将参数做为父元素的最后一个子元素追加到列表中,无返回值
  6. // span 添加到 div中
  7. // div.append(span);
  8. // 将 span,"world",添加到 div中
  9. div.append(span, " world");
  10. // 方式一: 将 div 添加到页面
  11. document.body.append(div);
  12. console.log(div)
  13. // 方式二:将 span, " world" 添加到页面
  14. // document.body.append(span, " world");
  15. // console.log(div)

2.为什么div中的span消失了?

image.png

image.png

  1. // 为什么div中的span消失了?
  2. // 新元素span只能插入到一个地方;span在div,现在span在body中,相当于剪切操作
  3. // 如果想保留span在div中,要克隆span
  4. // cloneNode(true), true: 是完整的保留元素内部结构
  5. document.body.append(span.cloneNode(true), " world");

效果如图:

image.png

3. DOM 树元素的增删改

  • append():在尾部追加
  • prepend():在头部追加
  • before():在参考点之前添加一个新节点
  • after():在参考点之后添加一个新节点
  • replaceWith():替换元素
  • remove(无参数):删除元素
  • afterBegin: 开始标签之后,第一个子元素
  • beforeBegin: 开始标签之前,是它的前一个兄弟元素
  • afterEnd: 结束标签之后,它的下一个兄弟元素
  • beforeEnd: 结束标签之前,它的最后一个子元素
  1. // append()创建一个列表
  2. const ul = document.createElement("ul");
  3. // 循环来生成多个列表项 li
  4. for (let i = 1; i <= 5; i++) {
  5. let li = document.createElement("li");
  6. li.textContent = `item${i}`;
  7. ul.append(li);
  8. }
  9. document.body.append(ul);
  10. // append():在尾部追加
  11. // prepend():在头部追加
  12. li = document.createElement("li");
  13. li.textContent = "first item";
  14. li.style.color = "red";
  15. ul.prepend(li);
  16. // 如果想在除了头尾之外的地方添加怎么操作?
  17. // 必须要有一个参考节点的位置,否则就不知道要添加到哪个节点的前面或后面
  18. // 以第四个节点为参考
  19. const referNode = document.querySelector("li:nth-of-type(4)");
  20. referNode.style.background = "cyan";
  21. // 在它之前添加一个新节点
  22. li = document.createElement("li");
  23. li.textContent = "在参考节点之前插入";
  24. li.style.background = "yellow";
  25. // referNode.before(el),在插入位置(参考节点)上调用
  26. referNode.before(li);
  27. // 在它之后添加一个新节点
  28. li = document.createElement("li");
  29. li.textContent = "在参考节点之后插入";
  30. li.style.background = "violet";
  31. // referNode.after(el),在插入位置(参考节点)上调用
  32. referNode.after(li);
  33. // 替换节点
  34. // 将最后一个节点用链接替换
  35. let lastItem = document.querySelector("ul li:last-of-type");
  36. let a = document.createElement("a");
  37. a.textContent = "php中文网";
  38. a.href = "https://php.cn";
  39. lastItem.replaceWith(a);
  40. // 删除节点,在被删除的节点上直接调用
  41. // 将ul的第6个删除,remove(无参数)
  42. ul.querySelector(":nth-of-type(6)").remove();
  43. // 再介绍几个更牛的
  44. // insertAdjacentElement('插入位置', 元素)
  45. // 插入位置有四个
  46. // afterBegin: 开始标签之后,第一个子元素
  47. // beforeBegin: 开始标签之前,是它的前一个兄弟元素
  48. // afterEnd: 结束标签之后,它的下一个兄弟元素
  49. // beforeEnd: 结束标签之前,它的最后一个子元素
  50. // 插入第一个子元素之前(在起始标签之后);
  51. li = document.createElement("li");
  52. li.textContent = "第一个子元素";
  53. ul.insertAdjacentElement("afterbegin", li);
  54. ul.insertAdjacentElement("beforebegin", li);
  55. // 还有一个plus,可以直接使用html字符串当元素,省去了创建元素的过程
  56. // 追加到结尾
  57. ul.insertAdjacentHTML("beforeEnd", '<li style="color:red">最后一个子元素</li>');
  58. // 还可以直接插入文本
  59. const h2 = document.createElement("h2");
  60. h2.insertAdjacentText("beforeend", ul.lastElementChild.textContent);
  61. console.log(h2);
  62. document.body.insertAdjacentElement("afterend", h2);
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:dom,api众多,再多查阅mdn
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post