如何将样式应用于特定孩子的父母

时间:2015-04-23 10:06:11

标签: jquery css

我创建了一个菜单,如果用户单击其中一个侧面菜单项,则会显示侧面菜单和侧面菜单子项,但我遇到的问题是我的所有菜单项都是粗体被选中的孩子及其父母。

我希望我能清楚地解释清楚,

我的HTML

<div id="second-menu" class="collapse navbar-collapse menu_two">
    <ul class="nav navbar-nav inside-nav">
        <li class="sub_menu">   
            <a href="#">Section 1</a>
            <ul class="sidenav_wrapper">
                <li class="sidenav_item sidenavlast">
                    <a href="#">Section 2</a>
                </li>
            </ul>
        </li>
        <li class="sub_menu">
            <a href="#">Section 3</a>
            <ul class="sidenav_wrapper">
                <li class="sidenav_item">
                    <a href="#">Section 4</a>
                </li>
                <li class="sidenav_active">
                    <a href="#">Section 5</a>
                </li>
                <li class="sidenav_item">   
                    <a href="#">Section 6</a>
                </li>
                <li class="sidenav_item sidenavlast">
                    <a href="#">Section 7</a>
                </li>
            </ul>
        </li>
        <li class="sub_menu">
            <a href="#">Section 8</a>
            <ul class="sidenav_wrapper">
                <li class="sidenav_item">
                    <a href="#">Section 9</a>
                </li>
                <li class="sidenav_item">
                    <a href="#">Section 10</a>
                </li>
                <li class="sidenav_item sidenavlast">
                    <a href="#">Section 11</a>
                </li>
            </ul>
        </li>
    </ul>
</div>

我的JS

    $('ul.navbar-nav li').hover(

    function () {
        $(this).find('.sidenav_wrapper:first').css('display', 'block');
    },

    function () {
        $(this).find('.sidenav_wrapper:first').css('display', 'none');
    });


    $(".sidenav_active").parent().css({
        "display": "block"
    });


    if ($('.sidenav_active').length > 0) {
        $('.sidenav_wrapper').parent().find('a').css({
            "font-weight": "700"
        });
    }

我的CSS

.menu_two {
    border-left: 16px solid #dfdfdf;
    padding-left: 0;
}
.sidenav_wrapper {
    background: none repeat scroll 0 0 #e7ecf5;
    border-left: 6px solid #8fb8e6;
    display: none;
    padding: 0;
}

.active_sub_menu a{
    font-weight: 700;
}

.active_sub_menu .sidenav_wrapper{
        display: block;
    }

.sidenav_active a{
        font-weight: 700;
    }

我的jsfiddle:JSFIDDLE

4 个答案:

答案 0 :(得分:1)

Demo

font-weight: 700; is in your js

Read about font-weight

根据评论:

Demo2你是说这个吗?

您可以在悬停时设置font-weight,并在停止悬停时删除它。

答案 1 :(得分:1)

我认为你需要的是

$('ul.navbar-nav li').hover(function () {
    $(this).find('.sidenav_wrapper:first').css('display', 'block');
}, function () {
    $(this).find('.sidenav_wrapper:first').css('display', 'none');
});

$(".sidenav_active").parent().css({
    "display": "block"
});

$('.sidenav_active').closest('.sub_menu').find('a').css({
    "font-weight": "700"
});

演示:Fiddle

答案 2 :(得分:0)

这是由你的js:

引起的
pointPlacement

正在说;

如果你的css中有side_active类,则选择所有sub_wrapper元素并选择所有子元素,给它们一个700的字体权重。

我无法建议此代码要执行的操作,但要删除它并修复&#​​39;你的问题。

如果您希望将此作为“活跃的”活动。相反,您可能希望查看类似addClass和removeClass函数的内容。

答案 3 :(得分:0)

这是因为下面的代码块:

if ($('.sidenav_active').length > 0) {
    $('.sidenav_wrapper').parent().find('a').css({
        "font-weight": "700"
    });
}

如果我正确理解您的意图,则应将代码更改为以下内容:

$('.sidenav_active').closest('.sub_menu').children('a').css({
    "font-weight": "700"
});

演示:http://jsfiddle.net/hazzik/hzyp66br/

或使用:has()>选择器的组合:

$('.sub_menu:has(.sidenav_active) > a').css({
    "font-weight": "700"
});

演示:http://jsfiddle.net/hazzik/hzyp66br/1/