2017-05-11 114 views
0

我有此复选标记块。正如名称所示,它在Stackoverflow上绘制类似于我们这里的复选标记。 我想这两个元素(checkmark_stem和checkmark_kick)的时,他们主动变成绿色,所以我试图做到这一点:添加和删除类元素子元素

window.setInterval(function() { 
     $('body').find('.checkmark').each(function (index) { 
      var current = $(this); 
      console.log(current); 
      var url = current.data('refresh'); 
      console.log(url); 
      var child = current.children; 
      var answerID = current.data('answer'); 
      console.log(child); 
      $.get(url + '?id=' + answerID, function (data) { 

       data = JSON.parse(data); 

       if(data.rating.solved_date === null) 
        current.children[0].removeClass('active'); 
       else 
        current.children[1].addClass('active'); 



      }); 
     }); 
    }, 1000); 

但似乎我无法正确做这个。这两个元素有没有什么办法可以addClass('active')

我的元素HTML

<blockquote class="accept-answer text-right {if !$isMine} hidden{/if}" > 
      <div class="checkmark" title="Accept this answer" data-url="{url('controller/api/questions/mark_as_solved')}" data-refresh="{url('controller/api/questions/refresh_accepted_answers')}" data-answer="{$answer['answerid']}" data-question="{$question['publicationid']}"> 
       <div class="checkmark_kick" title="Unnacept this answer"></div> 
       <div class="checkmark_stem" title="Unnacept this answer"></div> 
      </div> 
     </blockquote> 

编辑:我有过在此之前,它的工作。我只是想的标识,看起来更像是一个检查

<blockquote class="accept-answer text-right {if !$isMine} hidden{/if}" > 
      <div class="accept" title="Accept this answer" data-url="{url('controller/api/questions/mark_as_solved')}" data-refresh="{url('controller/api/questions/refresh_accepted_answers')}" data-answer="{$answer['answerid']}" data-question="{$question['publicationid']}"> 
       <div class="accepted up" title="Unnacept this answer"></div> 
      </div> 
     </blockquote> 



window.setInterval(function() { 
     $('body').find('.accepted.up').each(function (index) { 
      var current = $(this); 
      console.log(current); 
      var url = current.parent().data('refresh'); 
      console.log(url); 
      var parent = current.parent(); 
      var answerID = parent.data('answer'); 
      console.log(answerID); 
      $.get(url + '?id=' + answerID, function (data) { 

       data = JSON.parse(data); 

       if(data.rating.solved_date === null) 
        current.removeClass('active'); 
       else 
        current.addClass('active'); 



      }); 
     }); 
    }, 1000); 

亲切的问候

+0

你可以使用jQuery来选择两个子div并为它们添加'active'类。 - https://api.jquery.com/multiple-selector/。那是你在找什么? – vabii

+0

请注意,'current'只会引用最终的'.checkmark',因为您在每次迭代中都进行异步调用。 –

+0

[JavaScript闭合内循环 - 简单实用示例]的可能重复(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –

回答

0

道歉,如果我不理解你的问题,但让这个尝试:

if(data.rating.solved_date === null) { 
    for (var i = 0; i < current[0].children.length; i++) { 
     current[0].children[i].classList.remove("active"); 
    } 
    } else { 

    for (var i = 0; i < current[0].children.length; i++) { 
     current[0].children[i].classList.add("active"); 
     } 

} 
+0

'无法读取属性'removeClass'of未定义“ –

+0

可能想要调试并查看是否实际上正在填充”当前“。可能是你所有挫折的根源。 –

+0

'current.data'和'current.refresh'返回正确的结果。我想这是正确的 –

0

试试这个 - 它应该找到当前对象下的所有元素。

window.setInterval(function() { 
    $('body').find('.checkmark').each(function (index) { 
     var current = $(this); 
     console.log(current); 
     var url = current.data('refresh'); 
     console.log(url); 
     var child = current.children; 
     var answerID = current.data('answer'); 
     console.log(child); 
     $.get(url + '?id=' + answerID, function (data) { 

      data = JSON.parse(data); 

      if (data.rating.solved_date == null) 
       current.find('div').removeClass('active') 

      else 
       current.find('div').addClass('active') 


     }); 
    }); 
}, 1000);