0

スタイルの例外として機能する条件ステートメントを作成したいと思います。私のロジックは、ナビゲーションにロゴクラスがある場合、現在のナビゲーションの場所を見つけることです{expression}

脚本

 $('li.navCenter').on('click', function () {
   var findActiveLi = $('.footerUl').find(".currentFooterNav");//fine location of current navitation
   var logoTarget = $(findActiveLi > ".logo"); // finds if  currentnavli has logo class
    if ($(logoTarget) == true) {
        $("ul.logoUl > li").removeClass('orange blue green pink').addClass('grayLogo').css({
            'background-color': ''
        });
    }
});

HTML.currentFooterNavは移動します

    <footer id="footer">
  <nav>
    <ul class="footerUl">
      <li id="worksFooterNavi" class="navi"><a href="#">works</a></li>
      <li id="aboutFooterNavi" class="navi"><a href="#">about</a></li>
      <li class="homeFooterNavi navi currentFooterNav currentAll"><a href="#" title="logo">
        <div class="logo activeFooter">
          <ul class="logoUl">
            <li class="orange"></li>
            <li class="blue"></li>
            <li class="green"></li>
            <li class="pink"></li>
          </ul>
        </div>
        </a> ​
      </li>
      <li id="contactFooterNavi"  class="navi"><a href="#">contact</a></li>
      <li id="followFooterNavi"  class="navi"><a href="#">follow</a></li>
    </ul>
  </nav>
</footer>

この行にブール値を返すにはどうすればよいですか==true; 必要に応じて?
var logoTarget = $(findActiveLi > ".logo");

4

4 に答える 4

2

このようにしてみてください:

 var $logoTarget = $(".logo",findActiveLi[0]); // finds if  currentnavli has logo class
 if ($logoTarget.length > 0) {
于 2012-06-22T06:55:20.463 に答える
2

または、使用することもできます

var $logoTarget = $(findActiveLi).has('.logo').length;
if($logoTarget > 0){
 // your code
于 2012-06-22T06:58:26.127 に答える
1
var $logoTarget = $(findActiveLi).hasClass('logo'); 

.hasClass()

于 2012-06-22T06:59:28.310 に答える
1

さらにその答えを広げていきたいと思います。この問題について正しい推論を行うことが重要です。

あなたが書く場合:

var logoTarget = $(findActiveLi > ".logo");

その意味は:

変数を比較し、それが文字列よりも大きいfindActiveLiどうかを確認してから、この比較の結果(JQueryオブジェクトと文字列の間?!リンゴと飛行機の比較に少し似ています...)を関数に渡します。何かが起こります:) ".logo""$"

ご想像のとおり、プログラマーの観点からは、それはまったくナンセンスです。JQueryのようなプラグインを使用しても、それがフラッシュした通常のプログラム構文を意味するわけではありません。リテラル文字列の外部で使用される「>」記号は、比較に「大なり記号」が使用されることを意味します(主に数値)。

文字列(そうではない)の場合findActiveLiは、次のようにすることができます。

var logoTarget = $(findActiveLi + "> .logo");
                                  ^^^^^^^^^

文字列の連結による(たとえば、findActiveLiが ".activeLi"の場合、 ".activeLi > .logo"""が文字列の一部として宣言されるようになったため、その式は有効なセレクターになります)。

それでも、文字列ではなくオブジェクトであるため、機能しません。オブジェクトへの正しいアプローチは、それらのメソッドとプロパティを使用することです。そのため、最終的に、他のユーザーがあなたに言ったことにフォールバックします。

var logoTarget = $(findActiveLi).has('.logo').length;

つまり、次のことを意味します。

JQueryオブジェクト(要素または要素コレクション)を使用findActiveLiします。そのため、セレクターで指定された他の要素が含まれているかどうかを確認できる" "メソッドがあり、別の要素コレクションが提供されます。コレクションとして、私たちが見つけたこれらの要素の数を数えるプロパティがあります。has(selector).length

于 2012-06-22T07:14:25.113 に答える