你所不了解的javascript操作DOM的细节知识点(一)(3)

replaceChild(); 该方法接收2个参数,要插入的节点和要替换的节点,要替换的节点将由这个方法返回并从文档树中被移除,同时由插入的节点占据其位置,如下代码:

<div><p>11</p><p>22</p></div>

JS代码如下:

var test = document.getElementById("test"); var newNode = document.createElement("div"); // 替换第一个节点 var returnNode = test.replaceChild(newNode,test.firstChild); console.log(returnNode); // <p>11</p>

替换后html代码结构变为如下:

<div><div></div><p>22</p></div>

替换最后一个节点代码如下:

var test = document.getElementById("test"); var newNode = document.createElement("div"); // 替换最后一个节点 var returnNode = test.replaceChild(newNode,test.lastChild); console.log(returnNode); // <p>22</p>

替换后的代码如下:

<div><p>11</p><div></div></div>removeChild():移除节点,该方法接收一个参数,即要移除的节点;

被移除的节点将成为返回值,如下代码:

var test = document.getElementById("test"); var newNode = document.createElement("div"); // 移除第一个节点 var returnNode = test.removeChild(test.firstChild); console.log(returnNode); // <p>11</p>

移除后的代码结构变为如下:

<div><p>22</p></div>

移除最后一个节点的代码如下:

// 移除最后一个节点
var returnNode = test.removeChild(test.lastChild);
console.log(returnNode); // <p>22</p>
移除后的代码结构变为如下:

<div><p>11</p></div>cloneNode():

克隆一个相同的副本,该方法接收一个布尔值参数,如果为true的话,说明是深复制,复制该节点及整个子节点书,如果为false的话,只复制该节点本身,比如如下代码:

var test = document.getElementById("test"); var deeplist = test.cloneNode(true); console.log(deeplist); // <div><p>11</p><p>22</p></div> 如果是浅复制的如下代码: var test = document.getElementById("test"); var deeplist = test.cloneNode(false); console.log(deeplist);// <div></div>

Document类型

JS通过Document类型表示文档,document继承HTMLDocument(继承自Document)类型的一个实例,表示整个HTML页面。document对象是window的一个属性,所以可以通过全局对象来访问,document对象有如下特点:

nodeType值为9,
nodeName值为”#document”,
nodeValue值为null,
parentNode值为null,
ownerDocument值为null
理解文档document的子节点
documentElement: 该属性始终指向html元素,如下代码:
console.log(document.documentElement); // 指向html的引用
如果需要直接访问html元素的引用可以直接使用该元素更快,更方便。
childNodes: 通过childNodes列表访问文档元素;如下测试代码:

console.log(document.documentElement); // 指向html的引用 console.log(document.childNodes[0]); // <!doctype html> console.log(document.firstChild); // <!doctype html> console.log(document.firstChild === document.childNodes[0]); // true console.log(document.body); // 指向body的引用

所有的浏览器都支持document.documentElement 和 document.body属性;

title:  通过这个属性可以取得网页的标题,如下测试代码:

console.log(document.title);

也可以该方法设置网页的标题;如下代码:

document.title = “我是龙恩”;

URL:  取得页面中完整的url,如下代码测试:

console.log(document.URL); //

domain: 该属性包含页面的域名;如下测试代码:

console.log(document.domain); // 127.0.0.1

域名也可以设置的,比如常见的跨子域的情况下,我们需要设置相同的父域即可完成跨域;

namedItem(): 该方法可以通过元素的name特性取得集合中的项,比如现在页面上有很多input的框,我想通过他们的name属性取得自己想要的哪一项,测试代码如下:

HTML代码如下:

<input/>
<input/>

JS代码如下:

var inputs = document.getElementsByTagName("input");
console.log(inputs.namedItem("aa")); // <input/>

我们还可以通过方括号的语法来访问,如下代码:

console.log(inputs["aa"]); // <input/>

要想取得文档中所有的元素,可以向getElementsByTagName()中传入”*”; 星号表示全部的意思;

getElementsByName(); 该方法也是HTMLDocument类型才有的方法,这个方法会返回带有给定name特性的所有元素,如下测试代码:

<input type="radio"/> <input type="radio"/> var aa = document.getElementsByName("aa"); console.log(aa); // object console.log(aa.length); // 2

该方法也会返回一个HTMLCollection.

浏览器支持程度IE,firefox,chrome都支持;

Element类型

Element节点有以下特征:

nodeType的值为1;

nodeName的值为元素的标签名;

nodeValue的值为null;

parentNode可能是Document或Element

要访问元素的标签名,可以使用nodeName属性,也可以使用tagName属性,这两个属性会返回相同的值,如下代码:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgdxgp.html