【问题标题】:For Loop Should Find if a Value ExistsFor 循环应该查找值是否存在
【发布时间】:2021-08-16 05:31:41
【问题描述】:

对于上下文,下面的函数将参数“rank”作为大写字母(例如:“A”)。 "#nodeField" 是一个 div。

当代码运行时,下面的代码将解释输入“rank”并将“h1”附加到“nodeField”。每个“h1”都有一个不同的 id,第一个字母是它的等级,第二个字母是它在等级中的位置(见第 19 和 21 行)。第 8 行的 for 循环应测试“nodeField”中是否存在下一个等级的“h1”(例如:如果输入等级为“A”,则测试是否存在任何等级为“B”的“h1”) .如果下一个等级的任何“h1”确实存在,nextNodeRank 应该等于 true(此变量影响第 17 行的 if 语句)。

有谁知道如何修复 for 循环以产生预期的输出?

var alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
var aI = 0;

function addNode(rank) {
    var kill = false;
    var nextNodeRank = false;

    for (i = 0; i < $("#nodeField>h1").length; i++) {
        if ((kill = false)&&($("#" + alphabet[alphabet.indexOf(rank) + 1] + alphabet[i]).length !== 0)) {
            kill = true;
            nextNodeRank = true;
        }
    }
    
    var newNode = document.createElement("h1");
    newNode.innerHTML = 0;
    if (nextNodeRank == true) {
        aI = 0;
        newNode.id = rank + alphabet[aI];
    } else {
        newNode.id = rank + alphabet[aI];
    }
    
    document.getElementById("nodeField").appendChild(newNode);
    
    aI++;
}

【问题讨论】:

  • if((kill = false...,大概你的意思是==
  • 这个我试过了,不影响输出。
  • 请提供更多示例代码,特别是一些 HTML。理想情况下,使用 HTML/JS sn-p 工具提供一个可运行的示例。
  • 不幸的是,这不起作用,因为我在部分代码中使用了 JQuery。我无法将 JQuery 从我的文件链接到我的代码以导致堆栈溢出。
  • 您可以包含 cdn 版本的 jquery tho @TBQTLS

标签: javascript jquery function for-loop if-statement


【解决方案1】:

严格关注您的问题“测试nodeField 中是否存在下一个等级的h1”,这可以在不使用attribute selector 循环的情况下完成。

let nextRank = alphabet[alphabet.indexOf(rank) + 1]
nextNodeRank = $(`#nodeField>h1[id^="${nextRank}"]`).length

if (nextNodeRank) {
  // There are elements in the nextRank
}

template literals 的其他参考。

function nextRankElements(rank) {
  var alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
  let nextRank = alphabet[alphabet.indexOf(rank) + 1]
  nextNodeRank = $(`#nodeField>h1[id^="${nextRank}"]`).length
  console.log(`${nextNodeRank} elements of rank ${nextRank}`);
}

nextRankElements("A");
nextRankElements("B");
nextRankElements("C");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="nodeField">
  <h1 id="AA">1st A</h1>
  <h1 id="BA">1st B</h1>
  <h1 id="BB">2nd B</h1>
  <h1 id="CA">1st C</h1>
</div>

<h1 id="CB">This C won't be counted</h1>

【讨论】:

  • 这不起作用,因为“nodeField”中所有“h1”的 id 都是两个字符长。我不能使用您编写的代码仅从 h1 的 id 中提取第一个字符。不过,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多