Javascript 为什么jQuery会出现此函数作用域错误?

Javascript 为什么jQuery会出现此函数作用域错误?,javascript,jquery,scope,Javascript,Jquery,Scope,我有以下功能: function updateStatuses() { $.each($('.status-badge'), function (i, value) { value.removeClass('badge-known'); }); $.post("/Diagnostics/Update", { }, function(data) { $.each(data, function() { setStatu

我有以下功能:

function updateStatuses() {
    $.each($('.status-badge'), function (i, value) {
        value.removeClass('badge-known');
    });
    $.post("/Diagnostics/Update", {  }, function(data) {
        $.each(data, function() {
            setStatus(this.Id, this.Infos, this.Errors, this.Warnings);
        });
    });
    window.setTimeout(function () {
        $.each($('.status-badge:not(.badge-known)'), function(i, value) {
            value.addClass('badge-unknown');
        });
    }, 1000);
}
基本上,我正在更新一组来自AJAX调用的徽章。如果1000毫秒后,任何特定的徽章尚未更新,它将获得
徽章未知

上述函数被称为:

$(function () { updateStatuses(); });
我的问题是
value.removeClass('badge-known')给出以下错误:

TypeError: value.removeClass is not a function
如果我注释该行,timeout函数会在
value.removeClass('badge-unknown')上抛出相同的错误


令人困惑的是,
addClass
removeClass
setStatus
中使用,这是在上述函数下面定义的。我做错了什么?

value
是dom节点,而不是jQuery对象。试一试

$(value).removeClass('badge-known');

调用标准jQuery方法时,不需要使用
。每个
。大多数这样的方法都可以直接迭代一组元素

此外,在主
文档周围不需要匿名函数包装。ready
处理程序:

您的整个代码可以如下所示:

function updateStatuses() {
    $('.status-badge').removeClass('badge-known');

    $.post("/Diagnostics/Update", {  }, function(data) {
        $.each(data, function() {
            setStatus(this.Id, this.Infos, this.Errors, this.Warnings);
        });
    });

    window.setTimeout(function () {
        $('.status-badge:not(.badge-known)').addClass('badge-unknown');
    }, 1000);
}

$(updateStatuses);

然而,阿尔尼塔克的答案有一个更好的选择。其中两个
$。each()
不需要(抛出错误的两个)。@apsillers不需要任何
。each()
调用
removeClass
addClass
块。我接受Kevin的答案,因为他发现了我的实际问题,但是+1,因为这比我以前尝试的要优雅得多@DanRasmussen实际上是在一个
.each()
循环中,你最好使用
$(这个)
而不是
$(值)
,但没关系;-)我也试过了(
this.removeClass
),只是出于绝望尝试了
value
。。哈哈