在我的代码示例中,subnav
变量应该缓存对ul.nav-categories
DOM对象的引用,但在删除类后它会丢失。
<ul class="nav-categories">
<li>item 1</li>
<li>item 2</li>
</ul>
的jQuery
$subnav = $('ul.nav-categories');
if (*some condition*) {
$subnav.removeClass('nav-categories');
} else {
$subnav.addClass('nav-categories');
/* ^^^^ at this point $subnav becomes undefined in jQuery addClass function,
shouldn't it save a reference to the object and not 'ul.nav-categories'???
Am I caching ul reference incorrectly? */
}
答案 0 :(得分:0)
$subnav
无法在指定的代码中成为undefined
。但我想你的js代码片段包含在某种函数中,并且不止一次被调用。
可能是第一次调用它并删除了nav-categories
类。
然后它被称为第二次,并试图获得$('ul.nav-categories');
但该元素已经没有类nav-categories
。
因此$subnav
变为undefined
,因为jQuery无法找到设置它的节点。
答案 1 :(得分:0)
试试这个:
<ul class="nav-categories flag">
<li>item 1</li>
<li>item 2</li>
</ul>
$subnav = $('ul.flag');
if (*some condition*) {
$subnav.removeClass('nav-categories');
} else {
$subnav.addClass('nav-categories');
}
唯一的条件是:不要删除类“flag”或者你只能使用$ subnav = $(“ul”)
为什么:如果您多次评估该条件,JQuery第一次找到该对象并将删除该类,但所有其他时间对象$(“ul.nav-categories”)将不再存在。
希望这能帮到你;)