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

<a>CSS を介して要素に背景色を追加しています。<li>jQueryで要素をターゲットにしています。ご存じのとおり、jQuery は正常に動作している可能性がありますが、<a>要素に背景色があるため表示できません。

<a>代わりに、要素をターゲットにするように jQuery を変更してみてください。要素をターゲットにする場合は必ず使用する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は、より具体性が#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 に答える