当浏览器具有一定宽度时,jQuery将类和“数据切换”添加到引导导航锚点

Posted

技术标签:

【中文标题】当浏览器具有一定宽度时,jQuery将类和“数据切换”添加到引导导航锚点【英文标题】:jQuery add class and "data-toggle" to bootstrap nav anchor when browser has a certain width 【发布时间】:2015-07-19 06:08:28 【问题描述】:

当鼠标悬停在导航而不是单击时,我正在使用带有下拉菜单的 Bootstrap 3 框架。但是使用 CSS 我已经设置了环境,所以这只发生在浏览器宽度超过 979 时。

当浏览器宽度小于 979 时,我希望菜单在单击而不是悬停时显示。我认为这可以使用 jQuery 来实现。

我的尝试:

  if ($(window).width() < 979) 
        $('li.dropdown > a').addClass('dropdown-toggle');
        $('li.dropdown > a').append('data-toggle="dropdown"');
     else 
        $('li.dropdown > a').removeClass('dropdown-toggle');
    

这导致没有类被添加到下拉锚点,而不是像“将数据切换添加到锚点,而是将它添加到锚点内。

如何实现像“一样添加数据切换,并且类也正确添加。

谢谢

更新 为导航添加了 html

 <nav class="navbar navbar-default md-nav" role="navigation">
     <div class="container-fluid">
        <select class="nav-sel">
            <option value="Vous Etes">Vous Etes</option>
            <option value="Vous Etes">Vous Etes</option>
            <option value="Vous Etes">Vous Etes</option>
            <option value="Vous Etes">Vous Etes</option>
        </select>

        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
            <span class="sr-only"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
          <ul class="nav navbar-nav nav nav-tabs">
                <li class="dropdown"><a href="#">Ministére</a>
                    <div class="dropdown-menu">
                        <ul>
                            <li><a href="#">Promotion</a></li>
                            <li><a href="#">Prévention</a></li>
                            <li><a href="#">Les Féderations</a></li>
                            <li><a href="#">Le diréct</a></li>
                            <li><a href="#">Emplois & Mériers</a></li>
                            <li><a href="#">Grand Evénements</a></li>
                        </ul>
                        <img src="img/athlete-img1.jpg"  />
                    </div>
                </li>
                <li class="dropdown"><a href="#">Sport</a>
                    <div class="dropdown-menu">
                        <ul>
                            <li><a href="#">Promotion</a></li>
                            <li><a href="#">Prévention</a></li>
                            <li><a href="#">Les Féderations</a></li>
                            <li><a href="#">Le diréct</a></li>
                            <li><a href="#">Emplois & Mériers</a></li>
                            <li><a href="#">Grand Evénements</a></li>
                        </ul>
                        <img src="img/athlete-img1.jpg"  />
                    </div>
                </li>
                <li class="dropdown"><a href="#">Jeunesse</a>
                    <div class="dropdown-menu">
                        <ul>
                            <li><a href="#">Promotion</a></li>
                            <li><a href="#">Prévention</a></li>
                            <li><a href="#">Les Féderations</a></li>
                            <li><a href="#">Le diréct</a></li>
                            <li><a href="#">Emplois & Mériers</a></li>
                            <li><a href="#">Grand Evénements</a></li>
                        </ul>
                        <img src="img/athlete-img1.jpg"  />
                    </div>
                </li>
                <li class="dropdown"><a href="#">Publications</a>
                    <div class="dropdown-menu">
                        <ul>
                            <li><a href="#">Promotion</a></li>
                            <li><a href="#">Prévention</a></li>
                            <li><a href="#">Les Féderations</a></li>
                            <li><a href="#">Le diréct</a></li>
                            <li><a href="#">Emplois & Mériers</a></li>
                            <li><a href="#">Grand Evénements</a></li>
                        </ul>
                        <img src="img/athlete-img1.jpg"  />
                    </div>
                </li>
                <li class="dropdown"><a href="#">Mediatheque</a>
                    <div class="dropdown-menu">
                        <ul>
                            <li><a href="#">Promotion</a></li>
                            <li><a href="#">Prévention</a></li>
                            <li><a href="#">Les Féderations</a></li>
                            <li><a href="#">Le diréct</a></li>
                            <li><a href="#">Emplois & Mériers</a></li>
                            <li><a href="#">Grand Evénements</a></li>
                        </ul>
                        <img src="img/athlete-img1.jpg"  />
                    </div>
                </li>
                <li><a href="#">Espace Medias</a></li>
           </ul>
        </div><!-- /.navbar-collapse -->
    </div><!-- /.container -->
</nav>  

【问题讨论】:

$('li.dropdown &gt; a').data('toggle', 'dropdown'); 【参考方案1】:

你需要改变它如下:

DEMO

 $('li.dropdown>a').addClass('dropdown-toggle');
 $('li.dropdown>a').attr('data-toggle','dropdown');

问题出在下面一行:

 $('li.dropdown > a').append('data-toggle="dropdown"');

您试图附加 data-toggle 而不是将其添加为属性!!

【讨论】:

【参考方案2】:

如果您希望触发器在页面加载时以外的情况下工作,您需要绑定到窗口调整大小事件并触发基于该事件的检查。

$(window).on('resize', function() 
  if ($(window).width() < 550) 
    $('#changeMe').addClass('addedClass');
   else 
    $('#changeMe').removeClass('addedClass');
  
);
.addedClass 
  background-color: blue;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="changeMe">Hey</div>

你也应该使用$('li.dropdown &gt; a').attr('data-toggle','dropdown');而不是$('li.dropdown &gt; a').append('data-toggle="dropdown"');

【讨论】:

以上是关于当浏览器具有一定宽度时,jQuery将类和“数据切换”添加到引导导航锚点的主要内容,如果未能解决你的问题,请参考以下文章

如何用jquery实现实时监控浏览器宽度

每次点击将类添加到单个 div

具有绝对父级的 div 的 jQuery 动画宽度

单击内部复选框时,使用jQuery将类添加到包含li

jquery如何判断DIV宽度并赋值?

当孩子依赖父母,父母依赖孩子时,浏览器如何计算宽度