您好,欢迎访问一九零五行业门户网

原生js 操作dom

本文我们将和大家分享原生js 操作dom ,希望对大家有用。
ng-click="brandfnc($event)"$scope.brandfnc = function($event) { // 通过 $event.target 来获取 } ev.target.parentelementev.target.parentelement.children[0].srcev.target.previouselementsiblingev.target.nodenameconsole.log(ev.target.outerhtml);//<button ng-click="nggetsrc($event)">获取src</button>---整个console.log(ev.target.innerhtml);//获取src--中间的内容原生js的方法:1)创建节点:createelement创建元素, 也可以使用createtextnode创建文本节点. document.body指向的是<body>元素;document.documentelement则指向<html>元素 //创建节点 var createnode = document.createelement("p"); var createtextnode = document.createtextnode("hello world"); createnode.appendchild(createtextnode); document.body.appendchild(createnode); document.documentelement.appendchild(createnode);2)插入节点:appendchild,insertbefore, insertbefore接收两个参数,第一个是插入的节点,第二个是参照节点,如insertbefore(a,b),则a会插入在b的前面 //插入节点 var createnode = document.createelement("p");var createtextnode = document.createtextnode("hello world"); createnode.appendchild(createtextnode); var p1 = document.getelementbyid("p1"); document.body.insertbefore(createnode,p1);3)替换和删除元素,从replacechild和removechild的字面意思看,就是删除子节点,因此调用者,需要包含子节点p1,不然调用会报错。返回的节点是替换的或删除的元素,被替换/删除的元素仍然存在,但document中已经没有他们的位置了。 //替换元素 var replacechild = document.body.replacechild(createnode,p1);//删除元素 var removechild = document.body.removechild(p1);4)节点的属性:firstchild:第一个子节点lastchild:最后一个子节点childnodes:子节点集合,获取其中子节点可以somenode.childnodes[index]或者somenode.childnodes.item(index)nextsibling:下一个兄弟节点 previoussibling:上一个兄弟节点 parentnode:父节点 <ul id="ul"><li>sdsssssss</li><li>qqqq</li><li>wwww</li><li>eeee</li></ul> 复制代码 //节点属性 var ul = document.getelementbyid("ul"); var firstchild = ul.firstchild; console.log(firstchild.innerhtml); var lastchild = ul.lastchild; console.log(lastchild.innerhtml); var length = ul.childnodes.length; console.log(length); var secondchild = ul.childnodes.item(1); console.log(secondchild.innerhtml); var forthchild = ul.childnodes.item(2).nextsibling; console.log(forthchild.innerhtml); var thridchild = forthchild.previoussibling; console.log(thridchild.innerhtml); var parentnode = forthchild.parentnode; console.log(parentnode.innerhtml);5) 文档片段,好处在于减少dom的渲染次数,可以优化性能。 //文本片段 var fragment = document.createdocumentfragment(); var ul = document.getelementbyid("ul"); var li = null; for (var i = 4; i >= 0; i--) { li = document.createelement("li"); li.appendchild(document.createtextnode("item "+i)); fragment.appendchild(li); } ul.appendchild(fragment);6)克隆元素 somenode.clonenode(true):深度克隆,会复制节点及整个子节点 somenode.clonenode(false):浅克隆,会复制节点,但不复制子节点 //克隆 var clone = ul.clonenode(true);
document.body.appendchild(clone);
注意:1、childnodes.length存在跨浏览器的问题
可以看到有关列表的html片段没有用
<ul id="ul"> <li>sdsssssss</li> <li>qqqq</li> <li>wwww</li> <li>eeee</li> </ul>
这种书写格式而是使用没有换行的格式书写,是因为在不同的浏览器中,获取ul.childnodes.length的结果有差异:
在ie中,ul.childnodes.length不会计算li之间的换行空格,从而得到数值为4在ff、chrome,safari中,会有包含li之间的空白符的5个文本节点,因此ul.childnodes.length为9若要解决跨浏览器问题,可以将li之间的换行去掉,改成一行书写格式。
2、clonenode存在跨浏览器的问题
在ie中,通过clonenode方法复制的元素,会复制事件处理程序,比如,var b = a.clonenode(true).若a存在click,mouseover等事件监听,则b也会拥有这些事件监听。
在ff,chrome,safari中,通过clonenode方法复制的元素,只会复制特性,其他一切都不会复制
因此,若要解决跨浏览器问题,在复制前,最好先移除事件处理程序。
ng-click="brandfnc($event)"$scope.brandfnc = function($event) { // 通过 $event.target 来获取 } ev.target.parentelementev.target.parentelement.children[0].srcev.target.previouselementsiblingev.target.nodenameconsole.log(ev.target.outerhtml);//<button ng-click="nggetsrc($event)">获取src</button>---整个console.log(ev.target.innerhtml);//获取src--中间的内容原生js的方法:1)创建节点:createelement创建元素, 也可以使用createtextnode创建文本节点. document.body指向的是<body>元素;document.documentelement则指向<html>元素 //创建节点 var createnode = document.createelement("p"); var createtextnode = document.createtextnode("hello world"); createnode.appendchild(createtextnode); document.body.appendchild(createnode); document.documentelement.appendchild(createnode);2)插入节点:appendchild,insertbefore, insertbefore接收两个参数,第一个是插入的节点,第二个是参照节点,如insertbefore(a,b),则a会插入在b的前面 //插入节点 var createnode = document.createelement("p");var createtextnode = document.createtextnode("hello world"); createnode.appendchild(createtextnode); var p1 = document.getelementbyid("p1"); document.body.insertbefore(createnode,p1);3)替换和删除元素,从replacechild和removechild的字面意思看,就是删除子节点,因此调用者,需要包含子节点p1,不然调用会报错。返回的节点是替换的或删除的元素,被替换/删除的元素仍然存在,但document中已经没有他们的位置了。 //替换元素 var replacechild = document.body.replacechild(createnode,p1);//删除元素 var removechild = document.body.removechild(p1);4)节点的属性:firstchild:第一个子节点lastchild:最后一个子节点childnodes:子节点集合,获取其中子节点可以somenode.childnodes[index]或者somenode.childnodes.item(index)nextsibling:下一个兄弟节点 previoussibling:上一个兄弟节点 parentnode:父节点 <ul id="ul"><li>sdsssssss</li><li>qqqq</li><li>wwww</li><li>eeee</li></ul> 复制代码 //节点属性 var ul = document.getelementbyid("ul"); var firstchild = ul.firstchild; console.log(firstchild.innerhtml); var lastchild = ul.lastchild; console.log(lastchild.innerhtml); var length = ul.childnodes.length; console.log(length); var secondchild = ul.childnodes.item(1); console.log(secondchild.innerhtml); var forthchild = ul.childnodes.item(2).nextsibling; console.log(forthchild.innerhtml); var thridchild = forthchild.previoussibling; console.log(thridchild.innerhtml); var parentnode = forthchild.parentnode; console.log(parentnode.innerhtml);5) 文档片段,好处在于减少dom的渲染次数,可以优化性能。 //文本片段 var fragment = document.createdocumentfragment(); var ul = document.getelementbyid("ul"); var li = null; for (var i = 4; i >= 0; i--) { li = document.createelement("li"); li.appendchild(document.createtextnode("item "+i)); fragment.appendchild(li); } ul.appendchild(fragment);6)克隆元素 somenode.clonenode(true):深度克隆,会复制节点及整个子节点 somenode.clonenode(false):浅克隆,会复制节点,但不复制子节点 //克隆 var clone = ul.clonenode(true); document.body.appendchild(clone);注意:1、childnodes.length存在跨浏览器的问题
可以看到有关列表的html片段没有用 <ul id="ul"> <li>sdsssssss</li> <li>qqqq</li> <li>wwww</li> <li>eeee</li> </ul>
这种书写格式而是使用没有换行的格式书写,是因为在不同的浏览器中,获取ul.childnodes.length的结果有差异:
在ie中,ul.childnodes.length不会计算li之间的换行空格,从而得到数值为4在ff、chrome,safari中,会有包含li之间的空白符的5个文本节点,因此ul.childnodes.length为9若要解决跨浏览器问题,可以将li之间的换行去掉,改成一行书写格式。 
2、clonenode存在跨浏览器的问题
在ie中,通过clonenode方法复制的元素,会复制事件处理程序,比如,var b = a.clonenode(true).若a存在click,mouseover等事件监听,则b也会拥有这些事件监听。
在ff,chrome,safari中,通过clonenode方法复制的元素,只会复制特性,其他一切都不会复制
因此,若要解决跨浏览器问题,在复制前,最好先移除事件处理程序。
相关推荐:
js操作dom对象的流程
jquery中dom操作实例分析
js如何操作dom及获取浏览器高度以及宽度
以上就是原生js 操作dom 的详细内容。
其它类似信息

推荐信息