Jquery 方法不适用于var对象

Jquery 方法不适用于var对象,jquery,Jquery,我有以下工作代码snip: $.container.menu>section>article.mCustomScrollbardestroy 现在我开始在jQuery中将每个元素保存在一个变量中。所以我写的剪报有点不同: var containerMenu = $(".container.menu"), sectionMenu = containerMenu.children("section"), articleMenu = sectionMenu.children("arti

我有以下工作代码snip: $.container.menu>section>article.mCustomScrollbardestroy

现在我开始在jQuery中将每个元素保存在一个变量中。所以我写的剪报有点不同:

var containerMenu = $(".container.menu"),
    sectionMenu = containerMenu.children("section"),
    articleMenu = sectionMenu.children("article");

$(articleMenu).mCustomScrollbar("destroy");
var articleMenu = $(".container.menu > section > article");

articleMenu.mCustomScrollbar("destroy");
但是当我这样写的时候,它就不起作用了

然后我又尝试了一些不同的方法:

var containerMenu = $(".container.menu"),
    sectionMenu = containerMenu.children("section"),
    articleMenu = sectionMenu.children("article");

$(articleMenu).mCustomScrollbar("destroy");
var articleMenu = $(".container.menu > section > article");

articleMenu.mCustomScrollbar("destroy");
但这也行不通。 最后,我尝试用jQuery括号将articleMenu括起来: $articleMenu.mCu

但这也行不通

那为什么这行不通呢?我不想总是编写整个jQuery选择器,只需调用变量即可

编辑:

var container = $(".container"),
    section = container.children("section"),
    article = section.children("article"),

    menuTrigger = container.children(".menu-trigger"),

    containerMenu = $(".container.menu"),
    sectionMenu = containerMenu.children("section"),
    articleMenu = $(".container.menu > section > article");


function triggerMenu(){

   container.toggleClass("menu");

   if(container.hasClass("menu")){
      // won't work
      articleMenu.mCustomScrollbar("destroy");

      // will work
      $(".container.menu > section > article").mCustomScrollbar("destroy");
   }

}
这个版本不行。当我替换articleMenu时,它可以工作

编辑2: HTML:


没有理由认为这两种情况有任何不同:

// 1
var articleMenu = $(".container.menu > section > article");
articleMenu.mCustomScrollbar("destroy");

// 2
$(".container.menu > section > article").mCustomScrollbar("destroy");
事实上,您说它们是,让我期待您将jQuery选择器代码移动到另一个地方,这是有意义的。但是,您似乎将其移动到了代码中的某个位置,该位置在元素不存在时被调用。因此jQuery找不到元素,而这个“结果”存储在变量中。在这种情况下,选择元素的方式不是问题所在,问题在于选择元素的位置或时间

如果您自己无法判断上述情况是否属实,请发布完整的代码,这样我们就可以看到发生了什么

编辑:

事实上,这似乎是一个时间问题。您在代码运行时声明了articleMenu,但元素可能还不存在。如果您更改为以下内容,它应该可以工作:

功能触发菜单{

   // Once we're inside the function, the element should exist 
   var articleMenu = $(".container.menu > section > article"); 

   container.toggleClass("menu");

   if(container.hasClass("menu")){
      // should work now
      articleMenu.mCustomScrollbar("destroy");
   }
}

如果该元素从一开始就存在于页面上,则另一种解决方案可能是将代码包装在以下语句中:

$document.readyfunction{

   // Your code here will be executed when the page has finished loading
})


定义完变量后,请将每个变量都记录下来。嘿,汉斯。对不起,我迟了回复。我这周很忙。请看我的编辑,我发布了全部代码。谢谢你的编辑。但这很奇怪。我尝试了你的两种解决方案,但都不起作用!我真的不明白发生了什么…你能在应用解决方案一后发布你的完整代码吗?从理论上讲,triggerMenu函数的开头不可能不存在元素,但它在下面的3行中确实有效,因为DOM在此期间没有机会更改。不,我发布了整个HTML文件和所有自定义javascript行,我看到您的选择器包含.container.menu,但这些类中没有任何元素。只有一个带“容器”。您能否更改受影响的选择器,看看是否有帮助?