Blogger Information
Blog 37
fans 1
comment 0
visits 32629
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
深入理解构造函数原型以及dom元素操作
Jason Pu?
Original
663 people have browsed it

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

构造函数是一个创建对象的工厂,构造函数有一个属性叫prototype(原型),所有类实例共享的成员,都应该写到构造函数的原型上, 实例的原型永远指向它的构造函数的原型,实例的原型从构造函数的原型继承属性和方法,如果你new一个实例对象出来,在实例对象当中找不到一个属性,它会到原型上面去找,也就是实例的对象原型是继承自构造函数原型

  1. function UserInfo(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }

给构造函数原型添加一个原型属性:

  1. UserInfo.prototype.national="China";

//用构造函数实例化一个对象:

  1. const newUser = new UserInfo('小张',18);

给实例对象添加一个原型属性,它会指向它的构造函数的原型,也就是实例的对象原型是继承自构造函数:

  1. newUser.__proto__.region="Guangdong";
  2. console.log(newUser.national,newUser.region);//China Guangdong

但是给实例对象添加一个和原型属性相同的属性名字,则会覆盖掉原型属性

  1. newUser.region="Guangxi";
  2. console.log(newUser.national,newUser.region);//China Guangxi

二:常见获取dom元素的方法

1:传统的方式:

  1. document.getElementById //ID选择器
  2. document.getElementsByClassName //类名选择器
  3. document.getElementsByName //name选择器
  4. document.getElementsByTagName //标签选择器

2:querySelector:返回匹配的元素集合中的第一个元素,(返回一个)
例如用querySelector操作以下html代码中第一个li:

  1. <ul>
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. <li>4</li>
  6. <li>5</li>
  7. </ul>

js代码如下:

  1. li = document.querySelector("li");
  2. li.style.color="red";//如图第一个li变红了


3:querySelectorAll:返回匹配的元素集合所有成员
例如操作所有li的背景色:

  1. ls=document.querySelectorAll("li");
  2. ls.forEach(element => {
  3. element.style.backgroundColor="red";
  4. });

三:dom元素的增删改查

1.基本语法:
1.1:创建元素使用:document.createElement(“要创建的元素”);
1.2:添加到页面:parent.appendChild(“要添加的新元素”);
1.3:html语句插入:parent.insertAdjacentHTML(“插入位置”,””插入的语句),有四种位置可以插:

语句 位置
beforeBegin 插入到标签开始前
afterBegin 插入到标签开始标记之后
beforeEnd 插入到标签结束标记前
afterEnd 插入到标签结束标记后

1.4:创建虚拟的节点对象document.createDocumentFragment();
1.5:元素插入:insertAdjacentElement(“插入位置”,””插入的元素);
1.6:更新:parentNode.replaceChild(newChild, oldChild);
1.7:移除:node.removeChild(child);

2.实战部分:
明白了基本语法,我们就可以实战一下:
以以下html为例:

  1. <ul id="list">
  2. <li>items1</li>
  3. <li>items2</li>
  4. <li>items3</li>
  5. <li>items4</li>
  6. <li>items5</li>
  7. <li>items6</li>
  8. </ul>

1.增:

  1. const ul=document.querySelector("#list");
  2. const li=document.createElement("li");
  3. ul.appendChild(li);
  4. li.innerText="imNew";
  5. li.style.color="red";

或者可以试试新方法:

  1. let str="<li>我是新来的</li>";
  2. ul.insertAdjacentHTML("beforeEnd",str);

效果如下:

2.改:

  1. let h4 = document.createElement("h4");
  2. h4.innerText="我是h4";
  3. document.querySelector("li:nth-of-type(1)").replaceWith(h4);

或者:

  1. let changeChild = document.querySelector("li:first-of-type");
  2. ul.replaceChild(h4,changeChild);

效果如下:

3.删:

  1. let rem = document.querySelector("#list h4");
  2. ul.removeChild(rem);

好了,这下我们的h4不见了

4:js中dom的查询方法:
1.语法:

语句 说明
.children 获取所有子元素
.firstElementChild 获取第一个子元素:
.lastElementChild 最后一个
.parentElement 获取元素的父亲
.previousElementSibling 获取前一个兄弟
.nextElementSibling 获取最后一个兄弟

例如我们要获取以下第三个li的最后一个兄弟元素的innerHTML内容:

  1. <ul id="list">
  2. <li>items1</li>
  3. <li>items2</li>
  4. <li>items3</li>
  5. <li>items4</li>
  6. <li>items5</li>
  7. <li>items6</li>
  8. </ul>
  9. <script>
  10. let li=document.querySelector("li:nth-of-type(3)");
  11. console.log(li.nextElementSibling.innerHTML);//items4
  12. </script>

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