jquery - 根据条件

时间:2016-01-30 11:05:32

标签: javascript jquery html css

我每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);
})();

4 个答案:

答案 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
}