javascript中.nodeName的问题
<html><head><title>.nodeName</title></head><body><ulid=“eventslist”><li>1</li><li>2</...
<html>
<head>
<title>.nodeName</title>
</head>
<body>
<ul id=“eventslist”>
<li>1</li>
<li>2</li>
<li><a id="linkeditem" href="#">链接</a></li>
<li>3</li>
</ul>
<script type="text/javascript">
var myLinkItem=document.getElementById("linkeditem");
var nextListItem=myLinkItem.nextSibling;
var prevListItem=myListItem.previousSibling;
document.write(nextListItem.nodeName);
document.write(prevListItem.nodeName);
</script>
</body>
</html>
在IE中的测试结果是:
#text
我的问题是:
1.这段代码为什么只能在IE中运行,书中说“由于浏览器实现上的差别,在现代的浏览器中下一个和上一个兄弟并不是LI元素,而是将换行符作为内容的文本节点”,这是什么意思?
2.结果#text是文本节点,根据书中的意思就是换行符,这里换行符指的是?
3.我写了两个document.write(),为什么只有第一个返回了结果,prevListItem有问题?
4.最后一个问题:
//先看脚本
var demoList=document.getElementById("eventslist");
if(demoList.hasChildNodes()){
var ch=demoList.childNodes;
for(var i=0;i<ch.length;i++){
document.write(ch[i].nodeName+"<br />");
}
}
在IE中的结果是:
LI
LI
LI
LI(这很好理解)
但在ff、chrome、opera和safari中的结果都是:
#text
LI
#text
LI
#text
LI
#text
LI
#text
我的疑惑是即便#text指的是文本节点,但总感觉多一个#text~~~,谁可以告诉我这五个#text具体指的是什么吗?
谢谢,
var prevListItem=myLinkItem.previousSibling;
这是手误 展开
<head>
<title>.nodeName</title>
</head>
<body>
<ul id=“eventslist”>
<li>1</li>
<li>2</li>
<li><a id="linkeditem" href="#">链接</a></li>
<li>3</li>
</ul>
<script type="text/javascript">
var myLinkItem=document.getElementById("linkeditem");
var nextListItem=myLinkItem.nextSibling;
var prevListItem=myListItem.previousSibling;
document.write(nextListItem.nodeName);
document.write(prevListItem.nodeName);
</script>
</body>
</html>
在IE中的测试结果是:
#text
我的问题是:
1.这段代码为什么只能在IE中运行,书中说“由于浏览器实现上的差别,在现代的浏览器中下一个和上一个兄弟并不是LI元素,而是将换行符作为内容的文本节点”,这是什么意思?
2.结果#text是文本节点,根据书中的意思就是换行符,这里换行符指的是?
3.我写了两个document.write(),为什么只有第一个返回了结果,prevListItem有问题?
4.最后一个问题:
//先看脚本
var demoList=document.getElementById("eventslist");
if(demoList.hasChildNodes()){
var ch=demoList.childNodes;
for(var i=0;i<ch.length;i++){
document.write(ch[i].nodeName+"<br />");
}
}
在IE中的结果是:
LI
LI
LI
LI(这很好理解)
但在ff、chrome、opera和safari中的结果都是:
#text
LI
#text
LI
#text
LI
#text
LI
#text
我的疑惑是即便#text指的是文本节点,但总感觉多一个#text~~~,谁可以告诉我这五个#text具体指的是什么吗?
谢谢,
var prevListItem=myLinkItem.previousSibling;
这是手误 展开
2个回答
2012-08-09
展开全部
第一个 问题 IE 和其他浏览器对【子节点】解析有差别,差别主要在于其他浏览器会把元素之间的空白认做 #text节点而IE不会。所以这种情况要做到兼容就需要判断每个子节点的 nodeType值才能不会出错。
第二个问题 。说白了一个换行符可以理解就是一个不显示的字符,当然是文本类型。
第三个问题:那是由于nextListItem.nodeName的下一个兄弟节点 可理解为后面必有一个结束标志所以有节点。而第二个输出本身就是li的第一个子元素,故previousSibling为Null。
第四个问题还是要回到第一个问题
<ul id=“eventslist”>//这里和下个li直接有空格或回车换行故节点 #text 1
<li>1</li> // 同上 2
<li>2</li> //同上 3
<li><a id="linkeditem" href="#">链接</a></li>//同上 4
<li>3</li> //同上 5
</ul>
看总共有5个#text 节点,4个li节点
第二个问题 。说白了一个换行符可以理解就是一个不显示的字符,当然是文本类型。
第三个问题:那是由于nextListItem.nodeName的下一个兄弟节点 可理解为后面必有一个结束标志所以有节点。而第二个输出本身就是li的第一个子元素,故previousSibling为Null。
第四个问题还是要回到第一个问题
<ul id=“eventslist”>//这里和下个li直接有空格或回车换行故节点 #text 1
<li>1</li> // 同上 2
<li>2</li> //同上 3
<li><a id="linkeditem" href="#">链接</a></li>//同上 4
<li>3</li> //同上 5
</ul>
看总共有5个#text 节点,4个li节点
展开全部
问题正在看,先讲已经看到的一个问题: 代码17行里的 myListItem 应该是 myLinkItem ...
这就是 第三个问题的答案, 因为这里错了,所以只有第一个会返回结果
第一个问题里:myLinkItem获取的是a,非IE里它的上下兄弟节点都是null 。要读取上下li的话,需要: myLinkItem.parentNode, 这获取的才是那个li,这显示出来的才是#text
换行符。。。比如,这个是有换行符:
<li>2</li>
<li><a id="linkeditem" href="#">链接</a></li>
这个没有:
<li>2</li><li><a id="linkeditem" href="#">链接</a></li>
最后一个问题: #text 就是换行符啊
如果把那段改成:
<ul id="eventslist"><li>1</li><li>2</li><li><a id="linkeditem" href="#">链接</a></li><li>3</li></ul>
那么在运行 结果就和IE相同了:
LI
LI
LI
LI
然后。。。还有问题吗
这就是 第三个问题的答案, 因为这里错了,所以只有第一个会返回结果
第一个问题里:myLinkItem获取的是a,非IE里它的上下兄弟节点都是null 。要读取上下li的话,需要: myLinkItem.parentNode, 这获取的才是那个li,这显示出来的才是#text
换行符。。。比如,这个是有换行符:
<li>2</li>
<li><a id="linkeditem" href="#">链接</a></li>
这个没有:
<li>2</li><li><a id="linkeditem" href="#">链接</a></li>
最后一个问题: #text 就是换行符啊
如果把那段改成:
<ul id="eventslist"><li>1</li><li>2</li><li><a id="linkeditem" href="#">链接</a></li><li>3</li></ul>
那么在运行 结果就和IE相同了:
LI
LI
LI
LI
然后。。。还有问题吗
更多追问追答
追问
var prevListItem=myLinkItem.previousSibling;
这是手误,为什么两个document.write()只有一个结果啊?
追答
这个问题的话,是因为在IE里, 创建 a标签(同样的还有如 input等或其他表单控件,IE都会自动在后面创建一个1字节位的空白),所以这里myLinkItem。nextSibiling 是有值的,而previousSibling本身就没有,所以不显示
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询