选择所有兄弟元素,而不仅仅是后续的元素。

26 浏览
0 Comments

选择所有兄弟元素,而不仅仅是后续的元素。

目的是在鼠标悬停在一个元素上时,同时选中同类型和同级别的其他所有元素。尝试使用a:hover ~ a,但发现这并不能选中在悬停元素之前的元素... 有没有CSS解决方案?还是我应该用JavaScript解决?

0
0 Comments

问题的原因是CSS中的:hover伪类只能选择紧跟在元素后面的兄弟元素,而不能选择所有的兄弟元素。解决方法是使用jQuery的siblings()方法或parent().children()方法来选择所有的兄弟元素。

在给链接添加hover效果的示例中,使用了CSS和jQuery来实现。首先,在HTML中有一个包含多个链接的div元素。CSS样式中定义了div中的链接元素的颜色。然后,使用jQuery的hover方法为链接元素添加hover事件,当鼠标悬停在链接上时,为链接添加hover类,当鼠标离开链接时,移除hover类。

然后,一个人提出了使用$(this).siblings()或$(this).parent().children()来代替$("div a")的方法。这样做可以将动作与选择器解耦,可以更灵活地选择所有的兄弟元素。

因此,问题的原因是CSS中的:hover伪类只能选择紧跟在元素后面的兄弟元素,解决方法是使用jQuery的siblings()方法或parent().children()方法来选择所有的兄弟元素。

0
0 Comments

“选择所有兄弟元素,而不仅仅是后续的元素”问题的出现原因是因为CSS中没有提供直接选择兄弟元素的选择器。虽然有一些选择父元素的选择器(如父选择器),但是没有直接选择兄弟元素的选择器。这可能是因为选择兄弟元素相对于选择父元素来说更加复杂,而且在代码结构方面可能会带来一系列的问题。

在Jonathan Snook的博客文章中,他详细解释了为什么CSS中没有选择兄弟元素的选择器。他指出,这样的选择器在技术上很困难,因为元素的选择是基于层次结构的,而且在代码结构方面可能会导致一系列的混乱。

因此,简短的答案是,CSS中没有选择兄弟元素的选择器,如果需要选择兄弟元素,需要使用JavaScript来解决。

下面是一些解决方法的示例。使用jQuery:

$(selector).siblings().css({...});

如果要包括当前元素:

$(selector).parent().children().css({...});

或者使用纯JavaScript:

var element = document.querySelectorAll(selector); // 或者getElementById或其他方法
var siblings = element.parentNode.childNodes;
for (var i = 0; i < siblings.length; i++) {
    if (siblings[i] !== element) { // 可选
        siblings[i].style.color = 'red';
    }
}

注意,对于纯JavaScript部分,将`i = siblings.length`替换为`i < siblings.length`以避免无限循环。另外,可以添加一个条件判断`nodes[i] instanceof HTMLLIElement`来仅选择HTML标签。

感谢指正,这是一个打字错误。已经修复。

0