对前天发表的[关于parentElement和parentNode属性的问题]的补充
[原创]
但是如果不知道要取得哪个 TagName 的话怎么办? 其实也很简单,直接遍历节点的 childNodes,然后判断 nodeType,如果是 1 表示是一个 HTML 节点,如果是 3 表示一个文本节点。
(不知道啥时候这么浏览器才能统一啊, 各个浏览器的的竟争可把我们这些WEB开发人员寄害苦了)
下面还是放上段我今天做的一段代码: 兼容 火狐和IE (提供一个兼容的方案吧!)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>无标题页</title>
<script type="text/javascript" language="javascript">
window.onload=initAll;
function initAll()
{
document.getElementById("btnOk").onclick=showpp;
return false;
}
function showpp(evt)
{
if(evt)
{
var haha=document.getElementById(evt.target.parentNode.id).childNodes;
var hal=new Array();
var len=haha.length;
for(i=0;i<len;i++)
{
if(haha[i].nodeType==1)
{
hal.push(haha[i]);
}
}
alert(hal.length);
for(i=0;i<hal.length;i++)
{
alert(hal[i].id);
}
//for(i=1;i<len;i++)
//{
// alert(haha[i].nodeType);
// }
}
else
{
var haha=document.getElementById(event.srcElement.parentNode.id);
var len=haha.childNodes.length;
for(i=0;i<len;i++)
{
alert(haha.childNodes[i].tagName);
}
}
}
</script>
</head>
<body id="body1">
<div id="div3">11111
<div id="div1">22222</div>
<div id="div2">333333</div>
<input type="button" value="点击看看" id="btnOk" />444444444
</div>
</body>
</html>
***
1. 在这里如果if(evt) 相当于 if(evt!=0) 呵呵!这几天在C语言里学到的.
if(evt) 表示如果evt 存在(则为火狐浏览器),那么执行相应的代码.
否则(为IE浏览器)执行另外一段代码, 这样就很好的兼容了两种浏览器.
2. 还有一点要补充的是火狐不支持parentElement属性,因为那天用的是IE,所以没测出 parentElement和parentNode的区别, 所以以后要统一使用parentNode属性.
3. 补充一点数组的知识.
Array 对象
提供对创建任何数据类型的数组的支持。
arrayObj = new Array()
arrayObj = new Array([size])
arrayObj = new Array([element0[, element1[, ...[, elementN]]]])
参数
arrayObj
必选项。要赋值为 Array 对象的变量名。
size
可选项。可选项数组的大小。由于数组的下标是从零开始,创建的元素的下标将从零到 size -1。
element0,...,elementN
可选项。要放到数组中的元素。这将创建具有 n + 1 个元素的长度为 n + 1 的数组。使用该语法时必须有一个以上元素。
说明
创建数组后,能够用 [ ] 符号访问数组单个元素,例如:
var my_array = new Array(); for (i = 0; i < 10; i++)
{my_array[i] = i;
}
x = my_array[4];
由于 Microsoft JScript 中的数组的下标是从零开始的,前面例子中最后一条语句访问数组的第五个元素。该元素中保存的值是 4。
如果只向 Array 的构造函数传递了一个参数,而该参数是数字,则它必须是无符号32位整数(大约40亿)。该值成为数组的大小。如果该值为数值,但小于0或不为整数,发生运行时错误。
如果传递给 Array 构造函数的是单个值并且不是数值,设置 length 属性为1,而且唯一的元素值成为单个的传入的参数。
请注意 JScript 数组为解析数组,也就是尽管可以分配多个元素给一个数组,但实际上只有包含数据的元素才存在。这减少了数组使用的内存数量。
push 方法
将新元素添加到一个数组中,并返回数组的新长度值。
arrayObj.push([item1 [item2 [. . . [itemN ]]]])
参数
arrayObj
必选项。一个 Array 对象。
item, item2,. . . itemN
可选项。该 Array 的新元素。
说明
push 方法将以新元素出现的顺序添加这些元素。如果参数之一为数组,那么该数组将作为单个元素添加到数组中。如果要合并两个或多个数组中的元素,请使用 concat 方法。