1

CSS

#myMenu ul li {
    display: inline;
}
#myMenu ul li a {
    background-color:#333333;
    text-transform: uppercase;
    font-weight: bold;
    font-family:"Open Sans", Arial, sans-serif;
    font-size:12px;
    text-decoration: none;
    padding: 1em 2em;
    color: #000000;
    border-left:1px solid #333333;
    border-right:1px solid #333333;
    border-top:1px solid #333333;
}
#myMenu ul li a:hover {
    color: #fff;
    background-color: #999999;
}
.selection {
    background-color: #000000;
    border-bottom:10px solid #000000;
    border-top:9px solid #000000;
}

HTML

<div align="right" id="myMenu">
    <ul>
        <li><a href="#" data-id="appstructurediv">Structure</a></li>
        <li id="style"><a href="#" data-id="appstylediv">Style</a></li>
        <li><a href="#" data-id="appdetailsdiv">Details</a></li>
    </ul>

JavaScript

 $(function () {
     $("li:first-child").addClass("selection");
     $('li').click(function () {
         $('#myMenu li').removeClass('selection');
         $(this).addClass('selection');
     });
 });

我想为选定的项目背景添加黑色,但上面的代码不起作用。

background-color:#333333如果我从中删除#myMenu ul li a有效。

4

4 回答 4

0

您正在通过 CSS 向<a>元素添加背景颜色。您正在<li>使用 jQuery 定位元素。如您所知,jQuery 可以正常工作,但您看不到它,因为该<a>元素具有背景颜色。

尝试更改 jQuery 以改为定位<a>元素。确保在定位元素时return false使用或使用。preventDefault()<a>

另外,作为旁注,除非您有其他我不知道的事情,否则将选择类硬编码到第一个元素而不是使用 jQuery 定位它会更有效。只是一个提示。

于 2013-09-18T22:24:30.457 回答
0

这里有几个问题。

  • 您已将单击处理程序绑定到,li因此上下文将成为li元素
  • 您的背景颜色设置在锚点上:#myMenu ul li a最初
  • 假设您希望 .selection 应用于锚标记,它的特异性低于锚的类。

将您的代码和 CSS 更改为:

CSS:

#myMenu ul li a.selection {
    background-color: #000000;
    border-bottom:10px solid #000000;
    border-top:9px solid #000000;
}

代码:

$(function () {
     $("li:first-child").addClass("selection");

     // Or move your handler to the anchor rather than the list item
     $('li').click(function () {
         $('#myMenu li a').removeClass('selection');
         $(this).find('a').addClass('selection');
     });
 });

Demo Fiddle

于 2013-09-18T22:29:01.383 回答
0

还要添加到克里斯的答案...... css for#myMenu ul li a将始终超过,.selection因为它具有更多的特异性。如果您希望它们覆盖其中的样式,您将需要添加!important到其中的任何样式.selection#myMenu ul li a

于 2013-09-18T22:30:12.113 回答
0

一般来说,虽然 jQuery 会自动进行自动选择,但我个人喜欢自己处理它,因为那时我知道我的代码正在“选择”我想要的东西。

所以像这样:

$(function () {
    $("li:first-child").addClass("selection");
    $('li').each(function(){ //loop all li elements
        $(this).click(function () {
            $('#myMenu li.selection').removeClass('selection'); //select the li
            // with the selection class
            $(this).addClass('selection');
        });
    });
});

但基本上我看到的一个问题是你是如何做到的,锚上没有边距,或者你的 li 上没有填充,女巫可以使 li 的更改不可见。

与以下内容一起使用,它应该告诉您这是否有效

.selection{
background-color: #000000;
border-bottom:10px solid #000000;
border-top:9px solid  #000000;
padding:5px; //change to suit your needs
}
于 2013-09-18T22:30:36.250 回答