You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中为何无法通过同级子元素调用并更新另一子元素?

问题原因及解决办法

你的问题出在previousSibling的使用上:HTML里元素之间的换行、空格会被浏览器解析成文本节点,previousSibling会返回这些文本节点,而不是你要找的第一个<p>元素,所以直接给它设置innerHTML会报错。

修正方案1:使用previousElementSibling

这是最直接的方法,previousElementSibling只会返回前一个元素类型的兄弟节点,自动跳过文本节点:

var div = document.getElementsByTagName("div")[0];
var midp = div.children[1];
midp.innerHTML = "This is the middle child";
var firstp = midp.previousElementSibling; // 替换为该方法
firstp.innerHTML = "This is the first child";

修正方案2:手动过滤文本节点

如果需要兼容旧版浏览器(目前基本无需考虑),可以循环判断节点类型,直到找到元素节点:

var div = document.getElementsByTagName("div")[0];
var midp = div.children[1];
midp.innerHTML = "This is the middle child";
var firstp = midp.previousSibling;
// 跳过所有非元素类型的节点
while (firstp && firstp.nodeType !== 1) {
  firstp = firstp.previousSibling;
}
if (firstp) {
  firstp.innerHTML = "This is the first child";
}

另外,代码里var midPText = (midp.innerHTML = "...")这种写法没必要,直接赋值即可,无需将赋值结果存入变量(除非后续需要复用该字符串)。

内容的提问来源于stack exchange,提问作者Liquorice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:39:52