js如何给目标元素的兄弟元素更改样式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js如何给目标元素的兄弟元素更改样式相关的知识,希望对你有一定的参考价值。

找到目标元素的父元素,再找到它的子元素即可:
目标元素.parentNode.childNode
然后再通过循环给每个元素更改样式即可。当然这里面也包括了目标元素,要不要排除掉就看你了
也可以直接找目标元素的兄弟元素,但这要分两步走:往前找和往后找,除非目标元素是所有兄弟里面的老大或老幺,倒不如通过老爸直接找到所有兄弟来得更快更方便。
参考技术A

先获取兄弟节点对象,然后再修改样式。如:

var s= document.getElementById("test");
var ns=s.nextSbiling;   //获得s的下一个兄弟节点
var ps=s.previousSbiling;  //得到s的上一个兄弟节点
ns.style.color='red';//字体颜色
ps.className='red';//更改class属性

用jQuery也封装了,很多操作样式的方法。

使用 CSS 更改兄弟悬停时的元素样式

【中文标题】使用 CSS 更改兄弟悬停时的元素样式【英文标题】:Changing element style on sibling hover with CSS 【发布时间】:2012-01-22 12:49:49 【问题描述】:

我有以下结构:

<div id="e1">
  <h1>Header</h1>
  <div id="main">text text text text</div>
  <div id="footer">something</div>
</div>

我希望&lt;h1&gt; 变成蓝色,例如当页脚悬停时。我知道我可以用 Javascript 做到这一点,但我想知道你是否知道一些 CSS 技巧来做到这一点。

谢谢!

【问题讨论】:

我不确定 CSS3,但在标准 CSS 中,除非页眉是页脚的子元素,否则您不能这样做。 使用纯 CSS,我不相信这是可能的,但我可能错了。 @Justin Satyr:CSS3 选择器现在可以被视为“标准 CSS”,因为几个月前该模块已标准化为 W3C 推荐标准。 【参考方案1】:

您的 h1 位于 #footer 之前,因此纯 CSS 无法实现,因为它不提供选择器来匹配前面的同级元素。

【讨论】:

你可能是对的。我最接近解决方案的是:jsfiddle.net/bVPqx/1。但是在选择器中切换 div 和 h1 角色是不行的。 在选择器中切换角色是什么意思? 使用 "#e h1:hover~#footer" 可以,但使用 "#e #footer:hover~h1" 不行:jsfiddle.net/bVPqx/3【参考方案2】:

我以某种方式实现了它,不改变 html 结构和纯 CSS。

在 jsfiddle 中查看:http://jsfiddle.net/ijse/dhcqw/

【讨论】:

【参考方案3】:
#e1:hover 
      color:red;


#main, #footer
    color:black 

另一种选择。

【讨论】:

以上是关于js如何给目标元素的兄弟元素更改样式的主要内容,如果未能解决你的问题,请参考以下文章

悬停一个元素时更改所有其他元素的样式

如何在onClick函数中更改React.js中元素的样式[重复]

CSS父元素的子元素样式控制另一子元素怎么实现?

如何在 React js 中使用 ref 更改元素的样式

如何更改 iOS 和安卓浏览器上的 input[type="radio"] 元素的默认样式?

将表单元素状态传递给兄弟/父元素的正确方法是啥?