如何将css类添加到父元素?

发布于 2024-11-19 00:55:01 字数 702 浏览 2 评论 0原文

我正在尝试做一些相当简单的事情,但我可能错过了一些东西......

我有这样的代码:

var $highlights = $j("div.ab-highlights ul li a");
$highlights.hover(
    function () {
        $j(this).children().addClass('active');

        for (i=0; i < $highlights.length; i++)
        {
            if ($highlights[i] != this)
            {
                console.log(i);
                ($highlights.parent()[i]).addClass('lowOpacity');
            }
        }
    }, 
    function () {
        $j(this).children().removeClass('active');
    }
);

底线是我正在尝试将一个类(“lowOpacity”)附加到除我滚动的元素之外的所有元素。问题是它行不通。不起作用的线路是

($highlights.parent()[i]).addClass('lowOpacity');

我缺少什么?

I am trying to do something rather simple but I am probably missing something...

I have this code:

var $highlights = $j("div.ab-highlights ul li a");
$highlights.hover(
    function () {
        $j(this).children().addClass('active');

        for (i=0; i < $highlights.length; i++)
        {
            if ($highlights[i] != this)
            {
                console.log(i);
                ($highlights.parent()[i]).addClass('lowOpacity');
            }
        }
    }, 
    function () {
        $j(this).children().removeClass('active');
    }
);

The bottom line is that I am trying attach a class ("lowOpacity") to all elements except the one that I am rolling over. the thing is it won't work. the line that is not working is

($highlights.parent()[i]).addClass('lowOpacity');

What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

歌入人心 2024-11-26 00:55:01

一个元素只能有一个父元素。

$j($highlights[i]).parent().addClass('lowOpacity');

此代码将向每个突出显示元素的父级添加一个类。

您还可以像这样重构代码:

var $highlights = $j("div.ab-highlights ul li a");
$highlights.hover(
    function () {
        $j(this).children().addClass('active');
        $j($highlights).not(this).parent().addClass("lowOpacity"); //Thanks Felix +1
    }, 
    function () {
        $j(this).children().removeClass('active');
    }
);

An element can have only one parent.

$j($highlights[i]).parent().addClass('lowOpacity');

This code would add a class to the parent of each highlight element.

You could also refactor your code like this:

var $highlights = $j("div.ab-highlights ul li a");
$highlights.hover(
    function () {
        $j(this).children().addClass('active');
        $j($highlights).not(this).parent().addClass("lowOpacity"); //Thanks Felix +1
    }, 
    function () {
        $j(this).children().removeClass('active');
    }
);
我是男神闪亮亮 2024-11-26 00:55:01

看来您想将该类添加到 $highlights 元素的所有父级,期望当前悬停的元素:

$highlights.not(this).parent().addClass('lowOpacity');

这行代码替换了整个 for循环。

参考:

我想你也有再次从元素中删除lowOpacity。您可以将代码简化为:

var $highlights = $j("div.ab-highlights ul li a");
$highlights.hover(function () {
    $j(this).children().toggleClass('active');
    $highlights.not(this).parent().toggleClass('lowOpacity');
});

解释为什么您的代码不起作用:

$highlights.parent()[i]

返回一个 DOM 元素,但 addClass 是一个 jQuery 方法。因此,您必须再次将其传递给 jQuery 或使用 eq [docs] 相反:

$highlights.parent().eq(i).addClass('lowOpacity');

它所做的是获取 $highlights 中元素的所有父元素,然后选择 i第一个。

另一种方法是首先选择 $highlights 中的第 i 个元素,然后选择其父元素。

但正如您在上面所看到的,它要容易得多,而且您根本不必循环。

It seems you want to add the class to all parents of the $highlights elements, expect the currently hovered one:

$highlights.not(this).parent().addClass('lowOpacity');

This line of code replaces the whole for loop.

Reference: not

I think you also have to remove the lowOpacity from the elements again. You could reduce your code to this:

var $highlights = $j("div.ab-highlights ul li a");
$highlights.hover(function () {
    $j(this).children().toggleClass('active');
    $highlights.not(this).parent().toggleClass('lowOpacity');
});

Explanation for why your code does not work:

$highlights.parent()[i]

returns a DOM element, but addClass is a jQuery method. Thus you would have to pass it to jQuery again or use eq [docs] instead:

$highlights.parent().eq(i).addClass('lowOpacity');

What this is doing is getting all parent elements of the elements in $highlights and then selecting the ith one.

Another way would be to first select the ith element in $highlights and then its parent.

But as you have seen above, it is much more easier and you don't have to loop at all.

疯狂的代价 2024-11-26 00:55:01

这选择直接父级

$('your_selector').parent().doSomeThing()

选择父级中的多个元素

$('your_selector').parents('selector').doSomeThing()

this selects immediate parent

$('your_selector').parent().doSomeThing()

select multiple elements in parent

$('your_selector').parents('selector').doSomeThing()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文