为了账号安全,请及时绑定邮箱和手机立即绑定

(9-10 访问父节点parentNode)关于innerHTML的问题

(9-10 访问父节点parentNode)关于innerHTML的问题

Cassie_yu 2016-06-01 18:29:35
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>无标题文档</title></head><body><ul id="con">  <li id="lesson1">javascript<ul>         <li id="tcon">基础语法</li>        <li>流程控制语句</li>        <li>函数</li>        <li>事件</li>        <li>DOM</li></ul></li>  <li id="lesson2">das</li>    <li id="lesson3">dadf</li>  <li id="lesson4">HTML/CSS<ul>        <li>文字</li>        <li>段落</li>        <li>表单</li>        <li>表格</li></ul></li></ul>  <script  type="text/javascript">       var mylist = document.getElementById("tcon");    var a=mylist.parentNode.parentNode.parentNode.lastChild;   document.write(a.innerHTML+"<br />");   //document.write(a.childNodes.firstChild.innerHTML);   </script> </body></html>① 关于document.write(a.innerHTML+"<br />");  innerHTML显示两个标签中的内容,所以结果为什么不是                                                         HTML/CSS<ul>                                            <li>文字</li>                                   <li>段落</li>                                  <li>表单</li>                                  <li>表格</li></ul>                        而是 HTNL/CSS   ● 文字   ● 段落   ● 表单   ● 表格② document.write(a.childNodes.firstChild.innerHTML); 为什么不能显示第一个li的内容“文字”。
查看完整描述

2 回答

已采纳
?
夜丶灯火阑珊0

TA贡献1条经验 获得超3个赞

①第一个问题,innerHTML是会识别其中的标签的,并且具有标签自动补全功能,所以并不会像你说的那样

②第二个问题,a指的是lesson4,那么lesson4有两个子节点,第一个子节点为空格,第二个子节点为ul标签

写成document.write(a.childNodes[1].innerHTML)输出的是无序列表,要想获取第一个li中的内容,需要写成

document.write(a.childNodes[1].childNodes[1].innerHTML)  这样会输出第一个li中的内容,即  “文字”。


查看完整回答
3 反对 回复 2016-06-01
  • Cassie_yu
    Cassie_yu
    非常感谢您的回答 不过关于回答 ①innerHTML是会识别其中的标签的,并且具有标签自动补全功能 我有试过代码 <p id="a">****<span>****</span>****</p> 当document.write(document.getElementById("a").innerHTML)后,输出****<span>****</span>**** 那么此处的代码为什么没有识别标签或者是补全呢?还是说有其他原因。 ②更改后的代码确实是执行了正确的结果,但是说 a指的是lesson4,那么lesson4有两个子节点,第一个子节点为空格,第二个子节点为ul标签 一点疑惑的是为避免空格节点的影响,我有将ul移到HTML/CSS后紧跟,那么第一个空格节点是在什么地方呢?
  • 夜丶灯火阑珊0
    夜丶灯火阑珊0
    ①按照你说的方法,我去试了下,<p id="p1">有没有<span>识别</span>功能呢</p> document.write(document.getElementById('p1').innerHTML);,输出的是 “有没有识别功能呢”,并没有出现你说的情况啊,而且各个浏览器都试过了一遍,谷歌,火狐,欧朋,IE9,IE6都显示正常。 ②我写成document.write(a.childNodes[0].nodeType); 这样输出的是3,证明这是一个文本节点,而写成 document.write(a.childNodes[0].innerHTML);这样输出的是undefined,说明确实是一个换行符。如果将ul放在HTML/CSS的下一行,输出的是同样的结果。 为了获取不包含空白节点和解释节点的元素,可以使用children、firstElementChild、lastElementChild等 例如document.write(a.children[0].children[0].innerHTML);直接就可以输出 “文字”。
  • Cassie_yu
    Cassie_yu
    已经找到问题的原因了 非常感谢 ^O^
?
肥仔汇

TA贡献6条经验 获得超5个赞

① innerHTML会识别标签,改成innerText即可


② a指向<li id="lesson4"></li>没有错

但是.a.childNodes有二

a.childNodes[0]                                指向 HTNL/CSS

a.childNodes[1]                                才是指向<ul>的

a.childNodes[1].childNodes[1]        才是指向<li>文字</li>

a.childNodes[1].childNodes[0]        指向的是<ul>和<li>间的空格


PS:

想要a.childNodes[1].childNodes[0]指向<li>文字</li>也行

<ul>后面紧接<li即可> 

  <li id="lesson4">HTML/CSS<ul><li>文字</li>

然而这样子看上去并不好看 : - ) 

查看完整回答
反对 回复 2016-06-02
  • 2 回答
  • 0 关注
  • 1903 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信