取出两个undefined是因为在ff中,会将元素内的换行当成一个空的文本节点来处理。
有两种办法可以忽略掉空的文本节点:
第一种,根据nodeType过滤掉空文本节点:
function getFirstChild(parent) {
if(parent && parent.nodeType == '1') {
var node = parent.firstChild;
while(node.nodeType != 1) {
node = node.nextSibling;
}
return node;
}
}
第二种办法,用children[0]获取第一个节点,比如:
Span
在IE中使用document.getElementById('c').children[0],获取到的是,而不是Span。
nodeType返回值代表的含义:
返回值 节点类型
1 Element 元素节点
2 Attr 属性节点
3 Text 文本节点
4 CDATASection
5 EntityReference 文档中的实体引用部分
6 Entity 文档中的实体
7 ProcessingInstruction 处理指令
8 Comment 注释
9 Document 整个文档(文档根节点)
10 DocumentType 向为文档定义的实体提供接口
11 DocumentFragment 轻量级的 Document 对象,能够容纳文档的某个部分
12 Notation 代表 DTD 中声明的符号
各类节点的子节点:
节点类型 子节点类型
1 1、3、4、5、7、8
2 3、5
3 无子节点
4 无子节点
5 1、3、4、5、7、8
6 1、3、4、5、7、8
7 无子节点
8 无子节点
9 1、7、8、10
10 无子节点
11 1、3、4、5、7、8
12 无子节点
";
str = str.replace(/[ ]/g,""); //替换所有空格!
==================== 详细点就是 ==================
var sname = document.getElementsByName("name").value;
sname = sname.replace(/[ ]/g,""); //替换所有空格!
if(sname == "")
{
alert("name 输入为空");
}