【问题标题】:Values strictly equal problems价值观严格相等的问题
【发布时间】:2020-07-24 15:09:23
【问题描述】:

我是新来的编码人员,我正在为我必须制作的代码评分。 分级机非常挑剔,所以我对此有问题,所以顺序很重要,而现实世界中的事情并不重要。但是还是有一些问题。 我从 Javascript 创建了一个键盘,方法是创建按钮,为它们分配 innerText、一个 ID 并将它们一个接一个地放置。 这是我的代码。

let G4 = document.createElement ('button');
let sibemol = document.createElement ('button');
let C5 = document.createElement ('button');
let D5 = document.createElement ('button');
let F5 = document.createElement ('button');
let G5 = document.createElement ('button');

G4.innerHTML = '<button id="G4">G4</button>';
sibemol.innerHTML = '<button id="A#4">Bb4</button>';
C5.innerHTML = '<button id="C5">C5</button>';
D5.innerHTML = '<button id="D5">D5</button>';
F5.innerHTML = '<button id="F5">F5</button>';
G5.innerHTML = '<button id="G5">G5</button>';

G4.setAttribute('id', 'G4');
sibemol.setAttribute('id', 'A#4');
C5.setAttribute('id', 'C5');
D5.setAttribute('id', 'D5');
F5.setAttribute('id', 'F5');
G5.setAttribute('id', 'G5');

let keyboard = document.getElementById('simple-keyboard');
keyboard.appendChild(G4);
keyboard.appendChild(sibemol);
keyboard.appendChild(C5);
keyboard.appendChild(D5);
keyboard.appendChild(F5);
keyboard.appendChild(G5);

我遇到的问题是,首先 说“我应该有 6 个按钮”,它算我,因为我有 12 个,为什么它会加倍,我怎么能做到这一点,我在这里逐行发布(我有所有信息按钮一个按钮,但发现我必须按他们想要的顺序写行,显然-ik,这很糟糕。 然后,我有那个“按钮应该有 innerText Bb4 或 A#4”,我有这个消息: 表达式计算为假值:assert(note.indexOf(text) >= 0)

为什么会这样并且...我已经有那个内部文本了,所以我不知道是什么问题。

然后程序只是继续携带这些消息,好像事情的顺序是错误的,在我之前提到的两条消息之后: ⨯ 3. 按钮应该有 id-attribute C5 (3p) 期望值严格相等:'A#4' !== 'C5'

看起来,在我没有解决 Bb4 问题之前,我不会检查其余的代码 - 而且我只有 5 个可能的提交可以使用......

谢谢!

【问题讨论】:

  • 与问题无关:您不应在id 属性中使用## 在 CSS 选择器中用作 ID 的前缀,很难定位到包含此字符的 ID。
  • 你真的是指'&lt;button id="A#4"&gt;Bb4&lt;/button&gt;'吗? ID 与文本匹配会更有意义(并且 # 无论如何都不应该在 ID 中,这会使事情变得混乱,正如 Barmar 所说 - 或者,更好的是,除非分配必要,否则完全避免 ID)

标签: javascript html button expression innertext


【解决方案1】:

现在,您正在为每个按钮在按钮内创建一个按钮:

let C5 = document.createElement ('button');
C5.innerHTML = '<button id="C5">C5</button>';

这就像创造一些东西

<button><button id="C5">C5</button></button>

这就是造成问题的原因。

改为分配给您创建的按钮的idtextContent 属性:

sibemol.id = 'A#4'; // you're already doing this with setAttribute below
sibemol.textContent = 'Bb4';
C5.id = 'C5';
C5.textContent = 'C5';
D5.id = 'D5';
D5.textContent = 'D5';
// etc

(不需要setAttribute,这是不必要的冗长)

或者,如果 ID 与 textContent 匹配,则重复次数更少:

const keys = ['G4', 'Bb4', 'C5', 'D5', 'F5', 'G5'];
for (const key of keys) {
  const button = keyboard.appendChild(document.createElement('button'));
  button.id = key;
  button.textContent = key;
}

【讨论】:

  • 太棒了!有效。问题是,无论如何我都必须添加 setAttribute。我知道它又在写它所拥有的东西,但无论如何在任务中都被问到了。相反,我为 innerText 添加了带有

    的 innerHTML。有很多方法可以解决这个问题。

猜你喜欢
  • 2019-10-29
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多