Blogger Information
Blog 13
fans 0
comment 0
visits 9224
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
构造函数及dom元素持增删改查操作
我是贝壳
Original
937 people have browsed it

构造函数及dom元素持增删改操作

1. 构造函数的原型与对象原型之间的区别与联系

总体上,构造函数是“对象工厂”,是用来创建对象的
对象也叫“实例”,是Js通过new来调用构造函数来创建一个实际案例。
new创建对象的过程,就叫类的实例化

示范代码:

  1. // 一个“类”
  2. function User(name,age){
  3. this.name = name;
  4. this.age = age;
  5. }
  6. //定义User构造函数原型方法
  7. User.prototype.showName = function(){
  8. console.log(`my name is ${this.name},from ${this.nation}`);
  9. };
  10. User.prototype.shwoAge = function(){
  11. console.log(`i am ${this.age} old`);
  12. };
  13. //定义User构造函数原型变量
  14. User.prototype.nation = "中国";
  15. //实例两个对象user1,user2
  16. const user1 = new User("神仙",20);
  17. const user2 = new User("魔鬼",30);
  18. //以下输出 User {name:"神仙",age:20}
  19. console.log(user1);
  20. //以下输出 中国,原来user1或者user2定义时,并没有传入中国的属性,代码在对象user1/user2中没有找到相关变量声明时,就会回到两个对象共同的构造函数中去找,且找到User.prototype.nation="中国"声明,该属性被所有通过User构造函数实例的对象共享
  21. console.log(user1.nation);
  22. console.log(user2.nation);
  23. //以下输出:User {name: "神仙", age: 20, nation: "联合国"},User虽然声明了nation=中国,但是user1已经将nation属性重新定义,定义后就可以打印到控制台中
  24. user1.nation = "联合国";
  25. console.log(user1);
  26. //d输出 User {name: "魔鬼", age: 30},没有重新定义nation,所以不会打印出来,但是的确存在共享属性nation=中国。
  27. console.log(user2);
  28. //输出 my name is 神仙,from 联合国,user1没有定义该方法,系统会向上查找到构造方法原型中
  29. console.log(user1.showName());
  30. //改写对象中的原型方法
  31. user1.__proto__.showName = function(){
  32. console.log("神挡杀神");
  33. };
  34. // 输出 神挡杀神
  35. console.log(user1.showName());

不难看出,通过构造函数new(实例化)出来的对象,都会继承构造函数原型中的所有属性或者方法,属性不建议共享,但是方法写到构造函数原型中,能够简化代码,方便调用
当调用属性或者方法在对象中没找到,系统便会去构造函数的原型中找,还没有找到的情况下会向上查找到object的原型,直到报null为止;

2. 获取dom元素的常用方法

dom元素的获取有多种方法

  1. <button id="1",class="2",name="3">button1</button>
  2. let btn = document.getElementById("1"); //通过id属性来获取元素
  3. let btn = document.getElementByTagName("button"); //通过标签名来获取元素
  4. let btn = document.getElementByName("3"); //通过name属性来获取元素
  5. let btn = document.getElementByClassName("2");//通过class类名属性来获取元素

方法有多种,但是我们推荐用CSS选择器的方式来获取

  1. <ul class="course">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. </ul>
  6. let ul = document.querySelector(".course");//获取到ul元素
  7. let liList = document.querySelector(".course .item");//获取item类第一个元素
  8. //当需要获取到所有相同属性的元素集合时,可以使用querySelectorAll
  9. let liList = document.querySelectorAll(".course > .item");//获取所有li
  10. //里面元素可以使用【下标】来提取
  11. console.log(liList[0]); //第一个,等同于querySelector();
  12. //拿到元素集合后,可以通过foreach来遍历
  13. liList.foreach((item,index,Array){
  14. console.log(item,index);//index代表下标索引,item代表元素
  15. });
  16. //也可以将liList 转化为数组,下面提供两种转化方法
  17. let lisArr = Array.from(liList);
  18. let lisArr = [...liList];

3. dom元素的增删改查常用操作

公共代码:

  1. <ul class="course">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. </ul>
  6. //获取ul元素
  7. const ul = document.querySelector(".course");

1.增加元素

  1. //需要增加的元素li
  2. const li = document.createElement("li");
  3. //parent.appendChild(li); //将li元素添加到html页面中,最后位置
  4. //想将li添加到ul中,有三种方法:
  5. //方法1:子元素扩充,li成为ul的最后一个子元素
  6. ul.appendChild(li);
  7. //方法2:定义新增元素的html代码语句,用insertAdjacentHTML方法,可以指定位置
  8. let addLiHtml = "<li style='color:red'>新增元素li</li>";
  9. //insertAdjacentHTML方法的第一个参数:
  10. // beforeBegin:开始之前,即已经不属于ul了
  11. // afterBegin:开始之后,此时新增li变成ul的第一个子元素
  12. // beforeEnd:结束之前,此时新增li变成ul的最后一个子元素
  13. // afterEnd:结束之后,即已经不属于ul了
  14. ul.insertAdjacentHTML("beforeEnd",addLiHtml);
  15. //方法3:增加元素,可以指定位置
  16. ul.insertAdjacentElement("afterBegin",li);
  17. //需要大量添加元素时,如果一个一个加,页面就会频繁刷新,此时可以考虑用文档片断完成
  18. const frag = new DocumentFragment();
  19. //const frag = document.createDocumentFragment(); 这种方法创建片断也可以
  20. for(let i=0;i<5;i++){
  21. const li = document.createElement("li");
  22. li.textContent = 'hello' + (i+1);
  23. frag.appendChild(li);
  24. }
  25. //将片断挂到ul后面,成为ul的子元素
  26. ul.appendChild(flag);

2.更新元素

  1. const h3 = document.createElement("h3");
  2. h3.innerHTML = "晚上好";
  3. //先查找被替换的旧元素,然后用replaceWith()将,新元素替换旧元素
  4. document.querySelector('li:nth-of-type(3)').replaceWith(h3);、
  5. //如果要在父元素上进行操作replaceChild(新元素,旧元素)
  6. ul.replaceChild(h3,document.querySelector("li:nth-of-type(3)"));

3.移除元素

  1. //在父元素进行操作,删除子元素
  2. ul.removeChild(document.querySelector("#list h3"));

4.查询元素

  1. //获取所有子元素
  2. console.log(ul.children);
  3. //获取所有子元素的数量
  4. console.log(ul.children.lenght);
  5. console.log(ul.childElementCount);
  6. //获取第一个子元素
  7. console.log(ul.firstElementChild);
  8. //获取最后一个子元素
  9. console.log(ul.lastElementChild);
  10. //找前一个兄弟,先定位
  11. const nine = document.querySelector("li:nth-of-type(2)");
  12. //从定位出发,找前一个
  13. console.log(nine.previousElementSibling.innerHTML);
  14. //从定位出发,找后一个
  15. console.log(nine.nextElementSibling.innerHTML);
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
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