JavaScript操纵DOM纠错两则

本文介绍了在JavaScript中处理DOM时常见的两个问题:如何正确设置元素的class属性以确保跨浏览器兼容性,以及如何有效地删除DOM节点的所有子节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导读:
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

浏览器的差异,对dom本身内部机理的不熟悉都有可能产生错误。今天又用错了两个地方。

1、关于class和className
class
属性在HTML
DOM中扮演很重要的角色,css和DTHML都可能大量用到。但javascript的浏览器差异性仍然存在。动态设置一个element的属性:
element.setAttribute("class",
vName);语句在firefox中是行的通的,可是IE内核的浏览器却不认识"class",而得改用"className",同样,firefox
也不认识"className"。所以常用的方法是二者兼备:
   element.setAttribute("class", vName);
   element.setAttribute("className", vName);  //for IE

2、删除某个节点的所有子节点
这“某个节点”可能使用getElementById或其他方法得到的。删除方法如下:
   while(element.hasChildNodes()==true){
        element.removeChild(element.childNodes[0]);
   }

简单单两句话,看似没什么了不起。之前我用for循环(有经验的人一看就不该用),先用element.childNodes获得element的子元素
集,然后获取该元素集的数组长度,在进行循环删除。当时就发现元素多了一个(55成了56),没在意。后来发现删除到第28个元素就退出循环了,出现了循
环中的“奇迹”。想想,莫非childNodes里包括element本身?且DOM是树结构,又采用中序遍历的算法?结果到第
28个后把element自己给删掉了,也就什么都没了。




本文转自

http://www.cynest.cn/drupal/?q=node/682
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值