jquery组合多个变量(元素设置为vars)

Posted

技术标签:

【中文标题】jquery组合多个变量(元素设置为vars)【英文标题】:jquery combining multiple variables (elements set as vars) 【发布时间】:2016-01-20 18:59:52 【问题描述】:

我正在尝试为学校学习一点 javascript/JQuery,但遇到了一些我不太了解的东西。

我的函数中的所有内容都按我的意愿“工作”,但我必须将每个选择器列出在不同的行上才能从每个选择器中删除所有类,这感觉很奇怪。

我已经尝试了 .merge 和 .add 作为我在其他帖子上阅读的建议,但我无法使其工作(可能没有正确实施),我希望有人能告诉我如何做到这一点,也许可以解释一下为什么这样的事情不起作用:

$(menuWrapper, menuTrigger, menuIcon, contentWrapper).removeClass();

这是我的全部功能,以及它在 jsFiddle 上的工作(只是桌面 css)

// JavaScript Document
function toggleNavSettings(swipeDirection) 

    menuWrapper = $("#menu-wrapper");
    menuIcon = $('#menu-icon');
    menuTrigger = $("#menu-trigger-wrapper");
    contentWrapper = $("#custom-wrapper");
    if(menuWrapper.width() > 199)//if nav expanded
        if($( document ).width() > 480)//if screen is not mobile
        menuWrapper.removeClass();
        menuTrigger.removeClass();
        menuIcon.removeClass();
        contentWrapper.removeClass();
        menuWrapper.addClass("menu-collapsed");//collapse the emenu
        menuTrigger.addClass("menu-trigger-wrapper-d-closed");//swing the trigger
        menuIcon.addClass("open-d");
        contentWrapper.addClass("closed-d");//collapse the content pane
           
        else//if screen is Mobile
        menuWrapper.removeClass();
        menuTrigger.removeClass();
        menuIcon.removeClass();
        contentWrapper.removeClass();
        menuWrapper.addClass("menu-collapsed-m");//expand menu for desktop
        menuTrigger.addClass("menu-trigger-wrapper-d-closed");//swing the trigger
        menuIcon.addClass("open-d");
        contentWrapper.addClass("closed-d");
        
       
    else//if NAV is collapsed  
        if($( document ).width() > 480)//if screen is not mobile
        menuWrapper.removeClass();
        menuTrigger.removeClass();
        menuIcon.removeClass();
        contentWrapper.removeClass();
        menuWrapper.addClass("menu-expanded");//expand menu
        contentWrapper.addClass("open-m");//expand the content pane
           
        else//if window screen is MOBILE
        menuWrapper.removeClass();
        menuTrigger.removeClass();
        menuIcon.removeClass();
        contentWrapper.removeClass();
        menuWrapper.addClass("menu-expanded-m");//expand the menu
        menuTrigger.addClass("menu-trigger-wrapper-m-open");//swing the trigger
        menuIcon.addClass("open-m");
        contentWrapper.addClass("open-d");//expand the content pane
    
       




$(document).ready(function() 
    var menuTrigger = $("#menu-trigger-wrapper");

menuTrigger.click(function() 
toggleNavSettings(null);

);


);

https://jsfiddle.net/o5ogex6q/1/

提前致谢!

【问题讨论】:

【参考方案1】:

你可以使用这样的东西

$('#menu-wrapper, #menu-icon, #menu-trigger-wrapper, #custom-wrapper').removeClass();

编辑

您可以保留变量并使用以下语法object.selector 来获取 ID 值。唯一“凌乱”的是字符串逗号。

$(menuWrapper.selector+","+ menuTrigger.selector+","+menuIcon.selector+","+ contentWrapper.selector).removeClass();

【讨论】:

谢谢,但这就是为什么我很好奇为什么使用我已经声明的变量不起作用。我想将它们保留为变量,因此以后我可以切换每个变量的值并避免对 ID/Class 选择器进行硬编码。为了简单起见,我在函数中设置了我的变量,但稍后我计划将它们作为函数中的参数传递。 谢谢!这也有效。我觉得 .add 方法使代码更简洁,因为我可以在函数的开头组合我的对象,然后简单地使用 allMenuObjects.removeClass(); 执行。需要时。不确定哪一个性能更好,但一步一步:)谢谢!【参考方案2】:

这是一个重复的问题:How to combine two jQuery results

一个细微的区别是您必须单独传递每个集合,例如:

var allMenuObjects = menuWrapper.add(menuIcon).add(menuTrigger).add(contentWrapper);

希望这会有所帮助,感谢您在理解如何有效使用 jQuery 方面所做的努力。 (例如,不重复使用选择器引擎)

【讨论】:

谢谢!这使代码更清晰(IMO)。并为类似的问题道歉,我在最初的搜索中没有找到其他帖子。【参考方案3】:

试试下面的代码,

你可以使用toggleClass

查找有关toggleClass的更多信息

function toggleNavSettings(swipeDirection) 

  menuWrapper = $("#menu-wrapper");
  menuIcon = $('#menu-icon');
  menuTrigger = $("#menu-trigger-wrapper");
  contentWrapper = $("#custom-wrapper");
  
  if ($(document).width() > 480)  //if screen is not mobile
    
    menuWrapper.toggleClass("menu-collapsed"); 
    menuTrigger.toggleClass("menu-trigger-wrapper-d-closed"); 
    menuIcon.toggleClass("open-d");
    contentWrapper.toggleClass("closed-d");
    
   else  //if screen is Mobile
    
    menuWrapper.toggleClass("menu-collapsed-m"); 
    menuTrigger.toggleClass("menu-trigger-wrapper-d-closed"); 
    menuIcon.toggleClass("open-d");
    contentWrapper.toggleClass("closed-d");
    
  




$(document).ready(function() 
  
  var menuTrigger = $("#menu-trigger-wrapper");

  menuTrigger.click(function() 
  toggleNavSettings(null);
  );
  
);
@charset"utf-8";

/* CSS Document */

html 
  width: 100%;
  height: 100%;
  padding: 0;
  margin: 0;

body 
  background: #121212;
  color: #00c4e2;
  padding: 0;
  margin: 0;
  width: 100%;
  height: 100%;

.template-wrapper 
  position: relative;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;

#custom-wrapper,
#custom-wrapper.open-d 
  padding-left: 210px;
  transition: all 0.4s;

#custom-wrapper.closed-d 
  padding-left: 10px;

.content-page 
  position: relative!important;

#menu-wrapper 
  background: url(../images/menu_pattern_1.png);
  background-repeat: repeat;
  border-right: #00c4e2 10px solid;
  position: fixed;
  display: block;
  top: 0;
  left: 0;
  width: 200px;
  overflow-y: auto;
  height: 100%;
  transition: all 0.4s;
  z-index: 1001;

.menu-expanded 
  width: 200px;

.menu-collapsed 
  width: 0px!important;

.menu-collapsed-m 
  width: 0px!important;

.menu-wrapper.scroll 
  width: 210px;
  border-right: none;

#menu-trigger-wrapper 
  transition: all 0.4s;
  position: fixed;
  display: block;
  top: 0px;
  left: 209px;
  background: #00c4e2;
  width: 48px;
  height: 48px;
  color: #fff;
  cursor: pointer;
  z-index: 1002;

.menu-trigger-wrapper-d-closed 
  left: 9px!important;

.menu-trigger 
  width: 100%;
  height: 100%;
  position: relative;

/*MENU ANIMATIONS*/

/* Icon 1 */

#menu-icon 
  width: 86%;
  height: 100%;
  position: relative;
  margin: 10px 0px 0px 1px;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .5s ease-in-out;
  -moz-transition: .5s ease-in-out;
  -o-transition: .5s ease-in-out;
  transition: .5s ease-in-out;
  cursor: pointer;

#menu-icon span 
  display: block;
  position: absolute;
  height: 5px;
  width: 100%;
  background: #fff;
  border-radius: 9px;
  opacity: 1;
  left: 0;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .25s ease-in-out;
  -moz-transition: .25s ease-in-out;
  -o-transition: .25s ease-in-out;
  transition: .25s ease-in-out;

#menu-icon span:nth-child(1) 
  top: 0px;

#menu-icon span:nth-child(1),
#menu-icon.open-d span:nth-child(1) 
  top: 12px;
  -webkit-transform: rotate(135deg);
  -moz-transform: rotate(135deg);
  -o-transform: rotate(135deg);
  transform: rotate(135deg);

#menu-icon span:nth-child(2) 
  opacity: 0;
  top: 12px;

#menu-icon.open-d span:nth-child(1) 
  opacity: 100;

#menu-icon span:nth-child(3),
#menu-icon.open-d span:nth-child(3),
#menu-icon.open-m span:nth-child(3) 
  top: 12px;
  -webkit-transform: rotate(-135deg);
  -moz-transform: rotate(-135deg);
  -o-transform: rotate(-135deg);
  transform: rotate(-135deg);

#menu-icon.open-d span:nth-child(1) 
  top: 0px;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(-0deg);
  -o-transform: rotate(-0deg);
  transform: rotate(-0deg);

#menu-icon.open-d span:nth-child(2) 
  top: 12px;
  opacity: 100;

#menu-icon.open-d span:nth-child(3) 
  top: 24px;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(-0deg);
  -o-transform: rotate(-0deg);
  transform: rotate(-0deg);

.content-page 
  margin-left: 250px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="menu-trigger-wrapper">
  <div id="menu-icon"> <span></span>
    <span></span>
    <span></span>

  </div>
</div>
<div id="menu-wrapper" data-mcs-theme="inset">
  <div class="menu-container"> <a href="#page1" data-transition="turn">Link 1</a>

    <br> <a href="#page2" data-transition="turn">Link 2</a>

    <br> <a href="#page2" data-transition="turn">Link 3</a>

    <br>
  </div>
</div>
<div id="custom-wrapper">blah blah</div>

【讨论】:

谢谢,但我不认为toggleClass适合我,因为每个类都会有2个状态开和关,我需要有能力让每个类独立控制其他不属于此函数的变量。

以上是关于jquery组合多个变量(元素设置为vars)的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 根据组合的多个数据属性和搜索字段显示/隐藏多个元素

JQuery SumoSelect - 页面上具有不同宽度的多个实例

JQuery:遍历元素并设置为外部范围的变量

jQuery 在附加到 DOM 之前从元素中生成变量

将元素高度/宽度设置为百分比和像素值的组合[重复]

用于多个元素的jQuery选项卡式元素