为啥我不能通过 document.getElementById("node's_id").child 选择节点子节点?

Posted

技术标签:

【中文标题】为啥我不能通过 document.getElementById("node\'s_id").child 选择节点子节点?【英文标题】:Why can't I select nodes child by document.getElementById("node's_id").child?为什么我不能通过 document.getElementById("node's_id").child 选择节点子节点? 【发布时间】:2016-08-18 16:29:50 【问题描述】:

假设我有一个简单的 html 代码将父元素 div 和子元素 span 设置为:

<div id="my_div"><span> Nothin' but the G thang </span></div>

据说html DOM中的每一个元素都是一个对象。所以我们可以选择子对象为parent.child。例如。 window.documentwindow.document.bodywindow.document.head 等然后我的问题是为什么document.getElementById("my_div").span 返回未定义?

同样window.document.body 有效,但我无法在此之后使用window.document.body.div

【问题讨论】:

可能重复:best way to get child nodes. @FreemanLambda .span. 【参考方案1】:

对于.(dot-notation),您正在尝试访问document.getElementById 返回的object(Node/Element) 的span 属性。由于没有与返回对象关联的span 属性,document.getElementById("my_div").span 将是undefined

使用document.querySelector返回文档中的第一个元素(使用文档节点的深度优先预序遍历|按文档标记中的第一个元素并按子节点数量的顺序遍历顺序节点) 匹配指定的选择器组

console.log(document.querySelector('#my_div span'));
<div id="my_div"><span>  Nothin' but the G thang  </span>
</div>

Node.chilren只读属性,返回 Node 子元素的实时 HTMLCollection。

console.log(document.getElementById('my_div').children[0]);
<div id="my_div"><span>  Nothin' but the G thang  </span>
</div>

【讨论】:

如果没有额外的 JS 东西,getElementsByTagName 一旦你有了父元素就可以工作 @zerohero,有n 多种方式! querySelector 不需要额外的东西 headbody 是 DOM 中的属性还是对象? 是的,headbodydocument 对象的属性! 您能否提供参考,因为 w3school 另有声明w3schools.com/jsref/dom_obj_head.asp【参考方案2】:

你可以像这样选择跨度

var span = document.getElementById("my_div").querySelector('span');
console.log(span);
<div id="my_div"><span>  Nothin' but the G thang  </span>
</div>

或者在你的情况下你也可以使用firstChild

var span = document.getElementById("my_div").firstChild;
console.log(span);
&lt;div id="my_div"&gt;&lt;span&gt;Nothin' but the G thang  &lt;/span&gt;&lt;/div&gt;

【讨论】:

我已经编辑了这个问题。我不是在问如何选择孩子。我在问为什么不能选为document.getElementById("my_div").span 是的,它返回对象,但jsfiddle.net/Lg0wyt9u/609 内部没有 span 属性,这是所有属性的列表jsfiddle.net/Lg0wyt9u/610

以上是关于为啥我不能通过 document.getElementById("node's_id").child 选择节点子节点?的主要内容,如果未能解决你的问题,请参考以下文章

javascript使用for循环批量注册的事件不能正确获取索引值的解决方法

js几种定位方法总结

MKMapView 路线/方向

javascript游戏的重启按钮

将字符串作为变量

作业25——完成注册功能