一旦删除了类,jQuery就会丢失对缓存元素的引用

时间:2014-05-07 13:52:27

标签: javascript jquery

在我的代码示例中,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? */
}

2 个答案:

答案 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”)将不再存在。

希望这能帮到你;)