Jquery 方法不适用于var对象
我有以下工作代码snip: $.container.menu>section>article.mCustomScrollbardestroy 现在我开始在jQuery中将每个元素保存在一个变量中。所以我写的剪报有点不同:Jquery 方法不适用于var对象,jquery,Jquery,我有以下工作代码snip: $.container.menu>section>article.mCustomScrollbardestroy 现在我开始在jQuery中将每个元素保存在一个变量中。所以我写的剪报有点不同: var containerMenu = $(".container.menu"), sectionMenu = containerMenu.children("section"), articleMenu = sectionMenu.children("arti
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,但这些类中没有任何元素。只有一个带“容器”。您能否更改受影响的选择器,看看是否有帮助?