我有以下功能:
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
中使用,{{1}}在上面的函数下方定义。我在这里做错了什么?
答案 0 :(得分:4)
调用标准jQuery方法时无需使用.each
。大多数此类方法将很乐意直接迭代一组元素。
此外,主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);
答案 1 :(得分:3)
value
是一个dom节点,而不是一个jQuery对象。尝试
$(value).removeClass('badge-known');