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;
这是手误
展开
 我来答
匿名用户
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节点
百度网友d1014fa
推荐于2016-11-07 · TA获得超过364个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:147万
展开全部
问题正在看,先讲已经看到的一个问题: 代码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

然后。。。还有问题吗
更多追问追答
追问
var prevListItem=myLinkItem.previousSibling;
这是手误,为什么两个document.write()只有一个结果啊?
追答
这个问题的话,是因为在IE里, 创建 a标签(同样的还有如 input等或其他表单控件,IE都会自动在后面创建一个1字节位的空白),所以这里myLinkItem。nextSibiling 是有值的,而previousSibling本身就没有,所以不显示
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式