我每1分钟轮询一次json响应,并根据我在页面上添加或删除叠加层的响应。 我的回答大部分时间是积极的,在这种情况下,我应该删除覆盖类。 在下面的代码中,除了每次执行部分并且每次都执行删除类和隐藏函数。 有没有办法避免这种情况。在jquery中是否有任何方法来检查是否添加了类。隐藏也是活动的。 或者任何人都可以通过设置和取消设置布尔变量来实现此目的。
(function poll() {
setTimeout(function() {
$.ajax({
url: "path",
type: "GET",
success: function(data) {
console.log("polling" + data);
if (data.is_running === true) {
$("#overlay").addClass('show');
$("#alertDiv").show();
} else {
console.log("removing ....");
$("#overlay").removeClass('show');
$("#alertDiv").hide();
}
},
dataType: "json",
complete: poll,
timeout: 200
})
}, 5000);
})();
答案 0 :(得分:13)
您可以使用 toggle()
和 toggleClass()
,Boolean
值不需要if...else
语句,否则返回{ {1}}
false
要检查某个元素是否有类,您可以使用 hasClass()
,如果为匹配的元素分配了给定的类,则返回$("#overlay").toggleClass('show',data.is_running);
$("#alertDiv").toggle(data.is_running);
答案 1 :(得分:4)
请尝试以下操作并将$() query methods
保留在变量中以提高效率!
var $overLay = $("#overlay"),
$alertDiv = $("#alertDiv"),
sh = 'show';
if (data.is_running === true) {
$overLay.addClass();
$alertDiv.show(sh);
} else if ($overLay.hasClass(sh)) {
$overLay.removeClass(sh );
$alertDiv.hide();
}
答案 2 :(得分:3)
您可以检查某个元素是否具有hasclass()
的特定类:
var overlay = $('#overlay');
if (overlay.hasClass('show')) {
overlay.removeClass('show');
}
但您可以使用toggle()
和toggleClass()
,请参阅Pranav's answer。
答案 3 :(得分:0)
我认为您将data.is_running视为“true”
请更改您的代码
if (data.is_running == true){
//your code
}
or
if (data.is_running == "true"){
//your code
}