应使用element.previousElementSibling获取前一个<label>元素,再用textContent获取其文本内容;前提是label与表单控件必须为相邻兄弟且label在前,否则需通过for属性用querySelector查找。

直接用 element.previousElementSibling 获取不到“标签名称”,因为它返回的是前一个**元素节点**(比如 <label> 元素),而不是该元素的“名字”或“文本内容”。你要的是这个 <label> 里显示的文字(即表单控件的描述文字),通常在它的 textContent 或 innerText 中。
确认目标结构是否符合前提
该方法生效的前提是:你的表单控件(如 <input>、<select>)和对应的 <label> 是**相邻兄弟元素**,且 <label> 在控件前面。例如:
<label for="username">用户名</label><br><input type="text" id="username">
此时对 input 元素调用 .previousElementSibling 才能拿到 <label> 元素。
正确获取标签中的文字内容
拿到 <label> 元素后,读取其可见文本即可:
立即学习“Java免费学习笔记(深入)”;
-
推荐用
textContent:获取所有纯文本(包括隐藏元素内的,但更可靠、性能好) -
可用
innerText:只获取浏览器渲染出的可见文本(会受 CSS 影响,比如display: none的内容不包含)
示例代码:
const input = document.getElementById('username');<br>const labelEl = input.previousElementSibling;<br>if (labelEl && labelEl.tagName === 'LABEL') {<br> const labelText = labelEl.textContent.trim(); // → "用户名"<br> console.log(labelText);<br>}
注意常见失效情况
-
label 不是紧邻前一个元素:中间有空格、换行、注释或其它元素(如
<div>),previousElementSibling就会跳过它们,可能返回null或错误元素 -
使用了 for/id 关联但 label 在别处:HTML 中
<label for="xxx">可以放在任意位置,此时previousElementSibling完全无效,应改用document.querySelector(`label[for="${input.id}"]`) -
label 包含 HTML(如图标、
<span>):用textContent仍可获取全部文本,但若只想主文本,需进一步过滤子节点
更健壮的替代方案(推荐用于生产环境)
如果不能保证 DOM 结构严格相邻,建议结合 for 属性查找:
function getLabelForInput(input) {<br> if (!input || !input.id) return '';<br> const label = document.querySelector(`label[for="${input.id}"]`);<br> return label ? label.textContent.trim() : '';<br>}<br>// 使用<br>console.log(getLabelForInput(document.getElementById('username'))); // "用户名"


















