从变量声明返回布尔值

时间:2012-06-22 06:53:48

标签: jquery

我想创建一个条件语句作为样式中的异常。我的逻辑是找到当前导航的位置,如果导航具有徽标类{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>

如何让这一行返回一个boolean == true;必要时?
var logoTarget = $(findActiveLi > ".logo");

4 个答案:

答案 0 :(得分:2)

试试这样:

 var $logoTarget = $(".logo",findActiveLi[0]); // finds if  currentnavli has logo class
 if ($logoTarget.length > 0) {

答案 1 :(得分:2)

或者您也可以使用

var $logoTarget = $(findActiveLi).has('.logo').length;
if($logoTarget > 0){
 // your code

答案 2 :(得分:1)

var $logoTarget = $(findActiveLi).hasClass('logo'); 
  

.hasClass()

答案 3 :(得分:1)

我想扩大到答案。在此问题上做出正确的推理非常重要:

如果你写:

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

意思是:

  

比较变量findActiveLi,看看它是大于(?) string ".logo",然后传递的结果这个比较(在一个JQuery对象和一个字符串之间?有点像比较苹果和飞机......)到函数"$",希望发生一些事情:)

正如您可能想象的那样,从程序员的角度来看,这完全是胡说八道。使用像JQuery这样的插件并不意味着它会刷掉常规程序语法:“&gt;”在文字字符串之外使用的符号仍然意味着“大于”广告用于比较(主要是数值值)。

如果findActiveLi字符串(不是),您可以这样做:

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

通过字符串连接(f.ex.如果findActiveLi是“.activeLi”,该表达式将成为".activeLi > .logo"制作有效的选择器,因为“&gt;”现在被声明为字符串的一部分。)

它仍然不适合你,因为它不是字符串而是对象。对象的正确方法是使用他们的方法和属性,所以我们最终回到其他用户告诉你的内容:

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

这意味着:

  

使用findActiveLi ad JQuery对象(元素或元素集合);因此它有“has(selector)”方法,使我能够看到它是否包含选择器指定的其他元素,给我另一个元素集合;作为一个集合,我们有.length属性来计算我们找到的这些元素的数量。