检查循环中的条件

时间:2015-06-27 16:09:36

标签: javascript html

我正在尝试创建一个函数,通过id逐个获取所有元素,并将它们的id与className进行比较。

如果其中一个不同,则元素id'50's为e设置,否则(如果它们全部相等)元素的src e设置为Y.

问题是,如果元素id'50'== class'50',它会自动将src设置为Y,即使某些元素具有不同的id和class。

它似乎只测试最后一个元素,而不是测试所有元素。

function checking(){
  for(var i = 1; i < 51; i++){
    if(document.getElementById(''+i+'').id != document.getElementById(''+i+'').className){
      document.getElementById('50').src = '../images/X.gif';
      complete = false;
    }
    else{
      document.getElementById('50').src = '../images/Y.jpg';
      complete = true;
    }   
  }
}

只有简单的Javascript。

欢迎任何建议!

2 个答案:

答案 0 :(得分:1)

只测试最后一个(或者看起来如此),因为你永远不会停止循环。很自然地,它一直持续到结束,complete是最后一个值集。

如果您想在将其设置为false时停止,请使用break甚至return,因为此时您似乎已完成。

而且仅供参考,这是毫无意义的......

document.getElementById(''+i+'').id

与执行i或技术i.toString()相同。

所以重写你的代码,我们可以这样做:

function checking(){
  for(var i = 1; i < 51; i++){
    if(i != document.getElementById(i).className) {
       document.getElementById('50').src = '../images/X.gif';
       complete = false;
       return;
    }  
  }

  document.getElementById('50').src = '../images/Y.jpg';
  complete = true;
}

在这里,我摆脱了else并将其代码放在循环下方。现在,如果存在不匹配,我们设置complete并返回。如果没有找到不匹配,则在循环完成后循环后转到代码。

但是看起来你似乎在滥用变量。我们不知道complete在哪里,但看起来你应该只返回所需的布尔值。

function checking(){
  for(var i = 1; i < 51; i++){
    if(i != document.getElementById(i).className) {
       document.getElementById('50').src = '../images/X.gif';
       return false;
    }  
  }

  document.getElementById('50').src = '../images/Y.jpg';
  return true;
}

var complete = checking();

或者更简洁的方法是为所有ID创建一个选择器并使用.every()

var sel = "#" + Array.apply(null, 50).map(function(_, i) { return i+1; }).join(",#");

var complete = [].every.call(document.querySelectorAll(sel), function(el) {
    return el.id === el.className;
});

document.getElementById('50').src = '../images/' + (complete ? 'Y.jpg' : 'X.jpg');

答案 1 :(得分:1)

您可以在进入循环之前设置src属性,只有在idclassName属性不匹配时才能更改它。一旦发现不匹配,您还需要breakreturn

function checking() {
  var fifty = document.getElementById('50');
  fifty.src = '../images/Y.jpg';
  for (var i = 1; i < 51; i++) {
    var e = document.getElementById(i);
    if (e.id != e.className) {
      fifty.src = '../images/X.gif';
      return;
    }
  }
}