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

读《DOM编程艺术》遇到的2个疑问 ?

读《DOM编程艺术》遇到的2个疑问 ?

charsandrew 2018-01-04 05:39:05
  DOM编程艺术第2版 第129页对于图中这段html代码:<abbr title="Document Object Model"><em>DOM</em></abbr>使用firstChild属性和lastChild属性取得的不都是em元素节点吗?为什么我觉得二者这里效果没有差别呢?2.  DOM编程艺术 第140页书中说由于lastChild得到的节点可能不是一个元素节点, 为了实现得到最后一个元素节点lastElementChild的效果,使用了下面的代码:var quoteElements = parentNode.getElementsByTagName('*'); var elem = quoteElements[quoteElements.length - 1];得到的 elem 就是父节点的最后一个元素节点。 可是我觉的无论lastChild 还是 lastElementChild 都指的是父节点的儿子节点吧,使用getElementsByTagName('*')不是将所有后代元素节点都列出来了吗?lastElementChild 真的可以用上面代码实现???求解惑。。。 
查看完整描述

1 回答

?
qq_0_165

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

1,我试过了:两种得到的都是子节点<em>DOM</em>。反正,此处attr元素有1个子节点,是<em>元素节点,<em>又有1个子节点(文本节点DOM)。我觉得也许是书错了吧,你可以再自己试试!

2,因为,lastChild得到的可能是文本节点,而不是元素节点,因此,我们要使用parentNode.getElementsByTagName('*')得到所有的后代元素节点,就将所有的后代元素节点放在quoteElements 数组里面,获取数组的最后一个元素(quoteElements[quoteElements.length - 1]),那么,得到的肯定就是最后一个元素节点啊!

查看完整回答
反对 回复 2018-01-04
  • charsandrew
    charsandrew
    1. 是abbr元素 2. 抱歉问题没说清楚, 我想表达的是使用getElementsByTagName('*')得到的是父节点的所有子孙节点(儿子及所有后代节点), 而lastChild 或者 lastElementChild 无论如何得到的只是儿子节点呀。 比如:<div id="div"><p>this is<span>span.</span></p></div> 这段html, div的lastChild是p元素节点, 而使用上面的方法得到的是span元素节点。
  • qq_0_165
    qq_0_165
    你的理解没有问题,如果要找最后一个孩子节点确实不能使getElementsByTagName('*')这种方式!它会找出所有的后代元素,那么!!!应该只能使用lastChild吧!不好意思,我也不能解决你的问题,不太理解书上那两句话的意思!
  • charsandrew
    charsandrew
    谢谢回答,之前纠结的点就是到底是书上的问题还是我理解的问题。 另外HTML5有个lastElementChild属性。 https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/lastElementChild
点击展开后面1
  • 1 回答
  • 0 关注
  • 844 浏览
慕课专栏
更多

添加回答

举报

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