js 中dom的操作

创建节点

1.document.createElement();创建节点元素

   document.createTextNode('文本'); 创建文本,用这个api还不是直接innerText

   document.createDocumentFragment();无参数,添加多个元素时,先添加到这个中,再同一添加到页面,减少渲染,提高效率

 

2.通过innerHTML,innerText,outerHTML来高效创建

注意:innerText不支持火狐,火狐中可通过textContent来创建或获取

获取兼容写法:        function getInnerText(el) {

                                   return typeof el.textContent == 'string' ? el.textContent : el.innerText;

                                 }

设置兼容写法:       function setInnerText(el,text) {

                                        if(typeof el.textContent == 'string') { el.textContent = text;} else { el.innerText = text;} 

                                }

innerHTML注意点: 字符串最左边如果有空不,ie6~ie8会自动移出它,

                                 创建script标签,需要:  "<input type=\'hidden\'><script>......<\ /script>"

                                 创建style.meta.link等标签,需要: "_<style type = \'text/css\'>....</style>",插入元素后,要删除掉_;

 

查找节点

方法一:缺点(空白节点也算节点)

通过父节点找子节点: firstChild 第一个子节点       

                                     childNodes[n] 或者 childNodes.item(n) 第n个子节点,两种方法       

                                     lastChild 最后一个子节点

通过子节点找父节点:parentNode

通过兄弟节点找兄弟: nextSibling后一个兄弟                     previousSibling前一个兄弟

判断元素是否有节点  hasChildNodes()  返回true/false

方法二:空白节点不算节点

注意ie8及ie8以前才没有空白节点,现代浏览器都有空白节点,解决方法如下:不过下面方法对ie8一下不支持

利用nodeType = 1 ----->是元素来判断

通过父节点找子节点: firstElementChild 第一个子节点        children[n] 第n个子节点        lastElementChild 最后一个子节点

通过子节点找父节点:parentNode

通过兄弟节点找兄弟: nextElementSibling后一个兄弟                     previousElementSibling前一个兄弟

节点个数: childElementCount            不在加length;

 

调用节点

document.getElementById();  只能用document,在ie7中会获取到和id属性值一样的name属性值

                 解决方法:

function getid(id){
var el=document.getElementById(id);
if(!+'\v1') {//判断是否是ie浏览器
 
if(el&&el.id===id){
return el;
}else{
var allel=document.all[id];
for(var i=0;i<allel.length;i++){
if(allel[i].id===id){
return allel[i];
}
       }
}
}
return el;
}

 

document.getElementsByName(); 只能用document,获取name的dom元素,是一个类数组,在ie6和opeara7.5有bug;

document.getElementsByTagName();  获取标签元素,参数为!可获取注释,参数为*可获取所有元素;

document.getElementsByClassName();   ie8及一下不支持

document.querySelector('css选择器'):获取选择器的第一个元素

document.querySelectorAll('css选择器'):获取选择器的所有元素

 

操作节点

1.添加节点:

a.appendChild(b) ;  b节点插入a元素内部末尾

a.insertBefore(b,对象)    b节点插入a节点内部中某对象位置的前一个,如果第二参数为null,则是插入a节点内部的最后一个

2.替换节点

a.replaceChild(要插入的节点,要替换的节点)    a节点内部中替换节点

3.复制节点

a.cloneNode(true/false)  拷贝节点,并返回副本,通过上面几种方法,才能插入文本中,默认参数为false,仅赋值节点本身,为true时,赋值节点及子节点

4.删除节点

a.removeChild(b)  删除a中的b节点

       扩展:

       removeChild与innerHTML:

               createElment创建的节点再用removeChild删除,在ie678中会留下碎片,方便下次获取,但长久下去会增加负担,所以用innerHTML='',不会留下碎片,其他浏览器没区别;

a.removeNode(true/false)   IE私有,默认false,只删除本身,为true,删除本身和子元素;

posted @ 2018-12-02 11:36  fanbu  阅读(170)  评论(0编辑  收藏  举报