06-JS DOM操作

Posted 戒奢从简,起早贪黑,努力提升

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了06-JS DOM操作相关的知识,希望对你有一定的参考价值。

 

创建节点

document.write(创建任意内容,并写入)

document.write("<h1>添加到html中的文本</h1>");

 

docement.createElement(创建元素)

var jd = document.createElement("li"); //创建一个li元素

 

document.createTextNode(创建文本)

var wb = document.createTextNode("创建的文本");  //创建一个文本内容

 

document.createDocumentFragment (创建虚拟节点对象)

var fragment = document.createDocumentFragment();   //创建一虚拟的节点对象,节点对象包含所有属性和方法。

//document.createDocumentFragment()优点:说白了就是为了节约使用DOM。每隔javascript对DOM的操作都会改变页面的变现,并重新刷新整个页面,从而减少消耗的时间。为解决这个问题,可以创建一个文档碎片,把所有的新摘要附加其上,然后把文档碎片的内容一次性添加到文档中。

 

 document.createComment(创建注释)

var zhuxi = document.createComment("注释的内容");  //创建一个注释内容

 

 注:以上创建的节点需要  xx.appendChild()的方法添加到页面中。document.write除外。

 

 

 

高效创建节点

innerHTML

innerHTML:用来设置或获取当前标签的起始和结束里面的内容

html文档:<div id="dd" ><p> 321<p> </div>

script文档1:  //设置

var dd = document.getElementById("dd");
var str = "<p>文本1</p>"
+"<h1>标题节点</h1>"
+"<h2>小标题节点</h2>";
dd.innerHTML = str;         //原来div里面的元素都被替换

script文档2:  //获取

var dd = document.getElementById("dd");
console.log(dd.innerHTML);    //获取到的值为<p> 321<p>

 

 outerHTML

outerHTML:返回调用它的元素及所有子节点的HTML标签

html文档:<div id="dd" > 321 </div>

script文档1:

var dd = document.getElementById("dd");
console.log(dd.outerHTML);    //返回值<div id="dd" > 321 </div>

script文档2:

var dd = document.getElementById("dd");
dd.outerHTML = "<p> 清空原来的所有值,变成这个 </p>";    //原来的值是321。

 

 interText

interText:设置或获取位于对象起始和结束标签内的文本。

html文档:<div id="dd" ><p> 321<p> </div>

script文档: //获取目标文档

var dd = document.getElementById("dd");
console.log(dd.innerText);          //打印321

script文档2:   //设置目标文档

var dd = document.getElementById("dd");
console.log(dd.innerText);
dd.innerText = "<p> 替换原来所有的文本 </p>";     //屏幕div显示,<p> 替换原来所有的文本 </p>,p标签也会当作文档显示出来

注:火狐浏览器不支持该标签,不过有类似标签textContent

 

 outerText 与 innerText 的区别

outerText:获取文档跟innerText一样,设置不一样,如,

html文档:<div id="dd" ><p> 321<p> </div>

script文档:

var dd = document.getElementById("dd");
console.log(dd.innerText);
dd.outerText = "<p> 替换原来所有的文本 </p>";    //屏幕依然显示<p> 替换原来所有的文本 </p>,但是原来的div已经不复存在,只留下文本    <p> 替换原来所有的文本 </p>

 

 

 

父子节点查找

父节点 找 子节点

 找第一个子节点:firstChild
找最后一个子节点:lastChild
找第n个子节点:childNodes[n
-1]  //从0开始算
找第n个子节点:childNodes.item(n-1)  //从0开始算

 

子节点 找 父节点

找父节点:parentNode

 

子节点 找 兄弟节点

找下一个兄弟节点:nextSibling

找上一个兄弟节点:previousSibling

 

找文档根节点

直接查找文档的根节点:var gen = document.documentElement;

直接查找文档的根节点:var gen = p.ownerDocument;      //现在gen = document

tagName:返回属性的标签名。  //如,console.log("gen.tagName");  直接打印出根节点。

元素名.hasChildNodes();   //判断该元素是否有子节点,返回Boolean值。包括文本节点。

 

console.log(gen.children[i]); //打印出第 i+1 个节点,不包括文本节点,从0开始算

var shu =  gen.childElementCount;  //算出有多少个非文本节点的节点

 

 

 

类数组对象

类数组对象NodeList,转换成数组,再添加一个节点。

技术图片

 

HTMLCollection(获取类数组对象)

var script = document.scripts;  //获取当前html里面所有的script

var links = document.links;  //返回当前html中所有的a标签链接

var cells = document.getElementById("tr").cells;  //获取当前html中,所有的td元素

var imgs = document.images;  //获取当前html中,所有的图片

var forms = document.forms;  //获取当前html中,所有的表单

var options = document.getElementById("select").options;  //获取当前html中,所有的option选项

var ps = document.getElementsByTagName("p");  //获取当前html中,的所有p标签的内容

以上的值返回的都是HTMCollection

 

类数组对象NameNodeMap

技术图片

 

类数组对象的动态性

Nodelist,HTMLcollection, NamedNodeMap 三个集合都是 动态的, 是有生命、有呼吸的对象

它们实际上是基于DOM结构动态执行查询的结果,因此DOM结构的变化能够自动反映这些对象中

每当文档结构发生变化时,它们都会得到更新。因此,它们始终都会保存着最新、最准确的信息

 

 

 

获取节点

IE6 到 IE8 也兼容
getElementById()
getElementsByName()
getElementsByTagName()

IE9 或以上
getElementsByClassName()
querySelector()
querySelectorAll()

 

操作节点

<ul id="abc">
<li> 1 </li>
<li> 2 </li>
<li> 3 </li>
</ul>

 

appendChild() 

appendChild()  //为指定元素节点的最后一个子节点之后添加节点。该方法返回新的子节点。

如:要为上面ul添加一个li

var abc = document.getElementById(‘abc’);   //获取ul元素对象

var text = document.creatTextNode(‘4’);   //创建文本节点4

var li = document.createElement(‘li’);   //创建li元素

li.appendChild(text);    //给li元素填入文本节点4

ul.appendChild(li);    //给ul元素填入刚才的li元素

 

insertBefore()  

insertBefore()  //在指定的已有节点之前插入新的子节点

如:要为上面<li>2</li>前面插入一个新节点

var abc = document.getElementById(‘abc’);   //获取ul元素对象

var text = document.creatTextNode(‘4’);   //创建文本节点4

var lia = document.createElement(‘li’);   //创建li元素

lia.appendChild(text);    //给li元素填入文本节点4

var lib = abc.children.item(1);   //获取第二个子节点

abc.insertBefore(lia,lib);    //lia为要插入的节点,插入的位置是lib的前面,若是lib写成null,则效果跟appendChild一样。

 

replaceChild()

replaceChild(要插入的节点,被替换的节点)   //用新的节点替换某个子节点,返回值是被替换的子节点

如:要为上面<li>3</li>替换成<li>4</li>

var abc = document.getElementById(‘abc’);   //获取ul元素对象

var text = document.creatTextNode(‘4’);   //创建文本节点4

var lia = document.createElement(‘li’);   //创建li元素

lia.appendChild(text);    //给li元素填入文本节点4

var lib = abc.children.item(2);   //获取第3个子节点

abc.replaceChild( lia,lib );   //lia是要插入的节点,lib是被替换的节点。

 

cloneNode() 

cloneNode(true/false)   //节点的拷贝,返回该副本。不填时为false,false表示只拷贝当前节点的标签元素,不拷贝子节点;true表示连同子节点一起拷贝。

如:拷贝一份ul到当前的body里面

var abc = document.getElementById(‘abc’);   //获取ul元素对象

var clone = abc.cloneNode(true);    //连同子节点一起拷贝

document.body.appendChild(clone);     //拷贝的节点要有父节点,没有父节点的话得通过appendChild、insertBefore、replaceChild等方式进行添加

 

normalize() 

 

normalize()    //合并相邻的text节点

var div = document.creatElement(‘div’);   //创建一个div

var text = document.creatTextNode(‘123’);    //创建第一个文本节点

div.appendChild(text);     //把第一个文本节点添加到div里面

var text2 = document.creatTextNode(‘456’);    //创建第二个文本节点

div.appendChild(text2);    //把第二个文本节点添加到div里面

document.body.appendChild(div);   //在body显示div

 

 

 

技术图片

//可以看见右边调试工具的文本节点有两个的

div.normalize();   //这样我们就能把两个节点合并为一个节点了

 

技术图片

 

 

splitText() 

splitText()    //按照指定位置把一个文本节点分割为两个文本节点,返回新的文本节点

var div = document.creatElement(‘div’);   //创建一个div

var text = document.creatTextNode(‘123456’);    //创建一个文本节点

div.appendChild(text);     //把文本节点添加到div里面

var fen = div.firstChild.splitText(3);   //从第4个开始分割,包含第四个。

console.log(div.firstChild.nodeValue);   //控制台打印出第一个文本节点,即123

 

 

 

删除节点

<ul id="abc">
<li> 1 </li>
<li> 2 </li>
<li> 3 </li>
</ul>

 

removeChild() 

removeChild()   //删除某个节点,括号必须传入要删除的节点,返回删除的节点

如:删除上面<li>1</li>节点

var  abc = document.getElementById(‘abc’);   //获取ul元素id

var del = abc.removeChild(abc.childNodes[1]);   //删除第二个节点,上面一共7个节点,7个节点里面包含空白节点

 

removeNode()

removeNode()   //ie私有,参数是布尔值,默认为false。false时只删除改节点,true时连同子节点一起删

如:删除上面的ul节点,不删子节点

var  abc = document.getElementById(‘abc’);   //获取ul元素id

var del = abc.removeNode();

如:删除上面的ul节点,连同子节点

var  abc = document.getElementById(‘abc’);   //获取ul元素id

var del = abc.removeNode(true);

 

removeChild()与innerHTML的区别

removeChild(),在ie6-8删除后还可以调用;在chrome删除后还可以调用

innerHTML,在ie6-8删除后还不可以调用;在chrome删除后还可以调用

ps:调用指的是元素对应的方法,而不是元素本身

以上是关于06-JS DOM操作的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQuery ajax 在 DOM 操作后附加事件

jquery 对象的 heightinnerHeightouterHeight 的区别以及DOM 元素的 clientHeightoffsetHeightscrollHeightoffset(代码片段

DOM操作

JavaScript单行代码,也就是代码片段

dom操作

实用代码片段将json数据绑定到html元素 (转)