获取子类元素,FirstElementChild、children和ChildNode等等

本文介绍了如何通过firstElementChild、childNodes等方法获取DOM元素中的特定文本内容,并对比了这些方法的区别及适用场景。

<div>111

           <div>  2  </div>

         123

</div>

目的是想要获得第一个div里面的“111”和“123”这个元素,作为字符串输出。

1、使用firstElementChild

var ad=document.getElementsByTagName('div')[0].firstChild;

console.log(ad);

获得的是text类型的111,就是如果标签之间有text元素或者是空白格也都会作为firstChild检测出来,类型是object text。

想要获得“123”,name就使用lastChild。


2、使用childNodes

使用childNodes,

var ad=document.getElementsByTagName("div")[0].childNodes;

console.log(ad);

获得的是Nodelist,用于遍历,可以用中括号或者是item()来获得各类元素;


3、使用firstElemetChild

var ad=document.getElementsByTagName("div")[0]firstElementChild;

console.log(ad);

而如果想要获得div里面的div元素,那么可以使用firstElementChild。只会获得Element元素。最后一个标签元素可以用lastElementChi获得。


4、使用children

var ad=document.getElementsByTagName("div")[0].children[0];

console.log(ad);

firstElementChild对于ie6.7.8都不兼容,而使用children不会获取第一位obj text类的元素,而是获取了Element的元素,不会获取所有节点元素。


5、获得obj text里面的字符。

可以使用.data 和wholeText方法获得text文本里面的字符值


5、元素element是note里面的一种类型。


节点类型 NodeType
元素element  1
属性attr  2
文本text  3
文档document  9

而dom扩展里,element类型有children等扩展属性。children是element的属性。而childNodes是Node的属性。
因为使用id选择器获得元素是element类的也是note类型的,所以可以使用children和childNodes属性。

可是用childNodes获得元素之后并不能使用children属性。

node使用children属性会获得undefined。




<think>根据用户的问题,需要总结如何在JavaScript中指定获取元素中的某个子元素。结合提供的引用内容,可以总结出几种常用方法: 1. 使用`parent.querySelector()`或`parent.querySelectorAll()`:通过选择器获取特定子元素。 2. 使用`parent.children`:获取元素的所有子元素(仅元素节点),然后通过索引获取特定子元素。 3. 在事件处理中,通过`event.target`获取触发事件的子元素,通过`event.currentTarget`获取绑定事件的父元素。 用户的问题中没有提到事件,所以重点放在前两种方法。 另外,引用[2]提到,使用`children`比`childNodes`更好,因为`children`只返回元素节点,而`childNodes`会包含文本节点等。 因此,回答将包括: - 使用`querySelector``querySelectorAll` - 使用`children`属性 - 使用`firstElementChild`等(虽然用户没直接问,但可以简单提及) 注意:用户要求回答结构清晰,逐步解决问题,并且使用中文。 </think> 在 JavaScript 中获取元素内特定子元素的常用方法如下,结合引用内容说明: ### 1. 使用 `querySelector()`(推荐) 通过 CSS 选择器精准定位子元素: ```javascript // 获取元素 const parent = document.getElementById('parent'); // 获取第一个 <div> 子元素 const divChild = parent.querySelector('div'); // 获取所有 <span> 子元素 const spanChildren = parent.querySelectorAll('span'); ``` **特点**: - 支持复杂选择器(如 `.class`、`#id` 等) - `querySelector()` 返回**第一个匹配元素** - `querySelectorAll()` 返回**所有匹配元素的 NodeList 集合**[^1] ### 2. 使用 `children` 属性 获取所有子元素节点(仅元素类型,忽略文本节点): ```javascript const parent = document.getElementById('parent'); const allChildren = parent.children; // HTMLCollection 集合 // 通过索引获取特定子元素 const firstChild = allChildren[0]; const thirdChild = allChildren[2]; ``` **优势**: - 自动过滤文本节点(空白符等),避免 `childNodes` 的干扰[^2] - 返回**实时更新的 HTMLCollection** ### 3. 事件驱动获取(事件委托场景) 通过事件对象定位触发事件的子元素: ```html <div id="parent"> <button>按钮1</button> <button>按钮2</button> </div> <script> document.getElementById('parent').addEventListener('click', (event) => { const clickedChild = event.target; // 获取被点击的子元素 const parentElement = event.currentTarget; // 获取元素 console.log("点击的子元素:", clickedChild.tagName); // 输出: BUTTON }); </script> ``` **适用场景**:动态内容或批量元素的事件处理[^3] ### 4. 通过 `firstElementChild`/`lastElementChild` 获取特定位置的子元素: ```javascript const parent = document.getElementById('parent'); const firstChild = parent.firstElementChild; // 第一个子元素 const lastChild = parent.lastElementChild; // 最后一个子元素 ``` ### 关键区别总结 | 方法 | 返回类型 | 是否包含文本节点 | 实时更新 | |---------------------|------------------|------------------|----------| | `querySelector()` | 单个 Element | 否 | 否 | | `querySelectorAll()`| NodeList | 否 | 否 | | `children` | HTMLCollection | 否 | 是 | | `childNodes` | NodeList | 是 | 是 | > **最佳实践**:优先使用 `querySelector` `children`,避免 `childNodes` 的文本节点问题[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值