【问题标题】:Strange behaviour in the if statementif 语句中的奇怪行为
【发布时间】:2018-02-28 11:16:01
【问题描述】:

我有一段代码用于根据给定的数组隐藏表格元素。我正在运行循环来比较其中一个单元格的 innerText 和给定数组。

但是,我的 if 语句是语句的行为很奇怪,一旦我将运算符设置为 === 操作成功并且与数组匹配的表行被隐藏。但是我需要我的 if 来隐藏不属于数组的元素,所以我很自然地将我的运算符设置为 !== 但是一旦我这样做了,它就会无论如何都会执行,当然会隐藏表中的所有元素。

任何想法为什么会发生在这里是代码:

var td1 = document.querySelectorAll("#course");
var rowss = document.querySelectorAll("#rows");

var courseNames1 = [td1.innerText];

var diff = _.difference(soretedArray, courseNames1)

console.log(diff);

for (var i = 0; i < rowss.length; i++) {
  for (var j = 0; j < diff.length; j++) {
    if (td1[i].innerText === diff[j]) { // if i set the logic operator to !== it hides all of the elements rather the ones that don't match
      console.log(rowss[i]);
      rowss[i].style.display = "none";
      break;
    }
  }
}

【问题讨论】:

  • 听起来你想在 all 匹配该谓词时隐藏它,而不仅仅是第一个。
  • var courseNames1 =[]; 后跟 courseNames1 = td1.innerText 没有任何意义。你想让courseNames1 成为一个数组吗? (赋值用字符串替换数组。)
  • 为什么 "document.querySelectorAll("#course")" 其中 ID 应该是唯一的?
  • 这是选择表格的所有单元格
  • 您的代码中仍有courseNames1。我认为你不应该删除它的代码。

标签: javascript arrays loops if-statement dom


【解决方案1】:

根据您的要求,我添加了代码:您希望否定“包含”来隐藏元素。根据您提供的信息,这是尽可能完整的。

var soretedArray = [];//initialized elsewhere
var td1 = document.querySelectorAll("#course");
var rowss = document.querySelectorAll("#rows");

function tdContains(td) {
  for(var j= 0 ; j< soretedArray.length; j++){
      if(td.innerText === soretedArray[j]){
        return true;
      }
    }
    return false;
}

for(var i = 0 ; i < rowss.length; i++){
  if(!tdContains(td1[i])) {
      console.log(rowss[i]);
      rowss[i].style.display= "none";
  }
}

【讨论】:

  • 谢谢,现在可以更好地隐藏所需的元素!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多