0

我有以下功能:

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 毫秒后,任何某个徽章没有被更新,它就会获得badge-unknown该类。

上面的函数是这样调用的:

$(function () { updateStatuses(); });

我的问题是value.removeClass('badge-known');出现以下错误:

TypeError: value.removeClass is not a function

如果我将该行注释掉,超时函数会引发相同的错误value.removeClass('badge-unknown');

令人困惑的是,addClass并且removeClass用于setStatus,它在上述函数下方定义。我在这里做错了什么?

4

2 回答 2

4

.each调用标准 jQuery 方法时无需使用。大多数这样的方法将愉快地直接迭代一组元素。

此外,您的主处理程序不需要匿名函数包装器document.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);
于 2012-07-25T19:24:09.933 回答
3

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

$(value).removeClass('badge-known');
于 2012-07-25T19:23:58.627 回答