为什么Javascript setInterval函数中的else语句不起作用? 朋友 设置间隔(changeFriendBtnSize,1000); 函数changebfriendbtnsize(){ 下降=上升; if(document.getElementById('friends').getElementsByClassName('large3')){ 控制台日志('111'); document.getElementById('friends').classList.remove('large3'); document.getElementById('friends').classList.add('large4'); }else if(document.getElementById('friends').getElementsByClassName('large4')){ console.log('222'); document.getElementById('friends').classList.remove('large4'); document.getElementById('friends').classList.add('large3'); } }

为什么Javascript setInterval函数中的else语句不起作用? 朋友 设置间隔(changeFriendBtnSize,1000); 函数changebfriendbtnsize(){ 下降=上升; if(document.getElementById('friends').getElementsByClassName('large3')){ 控制台日志('111'); document.getElementById('friends').classList.remove('large3'); document.getElementById('friends').classList.add('large4'); }else if(document.getElementById('friends').getElementsByClassName('large4')){ console.log('222'); document.getElementById('friends').classList.remove('large4'); document.getElementById('friends').classList.add('large3'); } },javascript,if-statement,setinterval,Javascript,If Statement,Setinterval,在我的控制台日志中,它每秒反复记录111次,但从不记录222次。类large3被删除,而large4被添加,但从来没有相反的方式,为什么 表达式 <button id="friends" class="btn btn-primary large3">Friends</button> setInterval(changeFriendBtnSize, 1000); function changeFriendBtnSize() { let upDown = 'u

在我的控制台日志中,它每秒反复记录111次,但从不记录222次。类large3被删除,而large4被添加,但从来没有相反的方式,为什么

表达式

<button id="friends" class="btn btn-primary large3">Friends</button>

setInterval(changeFriendBtnSize, 1000);

  function changeFriendBtnSize() {
    let upDown = 'up';
    if (document.getElementById('friends').getElementsByClassName('large3')) {
      console.log('111');
      document.getElementById('friends').classList.remove('large3');
      document.getElementById('friends').classList.add('large4');
    } else if (document.getElementById('friends').getElementsByClassName('large4')) {
      console.log('222');
      document.getElementById('friends').classList.remove('large4');
      document.getElementById('friends').classList.add('large3');
    }
  }
始终返回节点列表。列表可能为空,但它仍然是对象引用,并且永远不会作为
false
进行测试

据我所知,
.getElementsByClassName()
并不是您要寻找的API。您的代码显然想要检查按钮当前具有哪个类;为此,您需要使用
.contains()检查
类列表


或者任何东西。

document.getElementById('friends')。getElementsByClassName('large3')
在id为“friends”的元素中查找类为“large3”的元素(并始终返回节点列表),例如:


在你的情况下,你在朋友里面寻找孩子,这就是
.getElementsByClassName
所做的。相反,您需要检查friends元素是否包含类名:

像这样:


document.getElementById('friends').classList.contains('large3')
使用
classList.toggle()
可以大大简化此过程

而不是必须写作

elt.classList.toggle('cls', bool);

document.getElementById('friends').getElementsByClassName('large3')
何时返回错误?查找
getElementsByClassName
@torazaburo getElementById足够快,没什么关系。
if (document.getElementById('friends').classList.contains('large3'))
<div id="friends"><div class="large3"></div></div>
if (document.getElementById('friends').classList.contains("large3"))
else if (document.getElementById('friends').classList.contains("large4"))
<button id="friends" class="btn btn-primary large3">Friends</button>

setInterval(changeFriendBtnSize, 1000);

function changeFriendBtnSize() {
  var elt = document.getElementById('friends');

  elt.classList.toggle('large3');
  elt.classList.toggle('large4');
}
elt.classList.toggle('cls', bool);
if (bool) elt.classList.add('cls');
else elt.classList.remove('cls');