Я сравниваю то, что находится в innerHTML элемента DOM, с тем, что находится в статическом текстовом массиве. То, что находится в элементе, всегда соответствует записи в текстовом массиве.
<p id = "main1">b</p>
var textArr = ["<p>a</p>","<p>b</p>","<p>c</p>"];
if (main1.innerHTML == textArr[0]) {
return 0;
} else if (main1.innerHTML == textArr[1]) {
return 1;
} else if (main1.innerHTML == textArr[2]) {
return 2;
} else if (main1.innerHTML == textArr[3]) {
return 3;
} else {
return 0;
}
//returns 1
Вскоре я добавлю записи в textArr и пойму, что цикл for в любом случае намного лучше для такого случая. Однако мой условный оператор никогда не попадает в цикл.
var index;
for (index = 0; index < textArr.length; ++index) {
if (main1.innerHtml == textArr[index]) {
return index;
}
}
//does nothing
Как я могу сравнить, что находится в элементе, с тем, что находится в массиве?
Ваш код «ничего не делает», потому что innerHTML, а не innerHtml. Также есть встроенный метод для этого Array.prototype.indexOf (который даже обеспечивает более согласованный вывод, возвращающий -1, когда элемент не находится в массиве)
@YuryTarabanko - Это правильный ответ. Я не могу сосчитать, сколько раз искал несоответствия корпусов. Спасибо
@YuryTarabanko Я рад, что вы это заметили, я это совсем не заметил!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы были почти у цели.
var main = document.getElementById("main1").innerHTML;
var textArr = ["a", "b", "c"]
function check(value, array) {
for (i = 0; i < textArr.length; i++) {
if (value == array[i]) {
return value + " is equal to " + array[i]
}
}
}
document.write(check(main, textArr))
document.write("</br>" + check("a", textArr))
document.write("</br>" + check("h", textArr))<p id = "main1" style = "display: none">b</p>Попробуйте этот Array.prototype.find ():
var found = textArr.find(function(element) {
return main1.textContent == element;
});
он вернет содержимое соответствующего элемента.
Но будет ли это более эффективным, чем использование indexOf? Я имею в виду, что в таком небольшом сценарии, уверен, что это, вероятно, не имеет никакого значения в отношении производительности, я на самом деле не уверен на 100%, что было бы более эффективным.
Он вернет undefined, а indexOf() вернет -1, если нет подходящего элемента, в любом случае я не думаю, что производительность важна в этой ситуации, подумайте, какой из них более удобен для вас.
main1 не определен. Я бы просто установил этот innerHTML в переменную, а затем сравнил бы.
var arr = ["a", "b", "c", "d"];
var answer = document.getElementById("main1").innerHTML;
var index;
for (index = 0; index < arr.length; index++) {
if (answer == arr[index]) {
return index;
}
}
main1 на самом деле определен в моем коде, и я забыл включить его здесь, но независимо от этого не нужно явно определять, поскольку идентификаторы автоматически глобально доступны, как было указано в другом ответе кем-то более умным, чем я
Это выполняет свою работу, как я уже сказал в комментариях, использование `` innerHtml '' может быть плохой идеей, если вам Только требуется текстовое содержимое соответствующего элемента HTML. Если вам нужны и вложенные теги, тогда конечно, это не должно быть проблемой, просто будьте осторожны, какой из них вы используете, бывают случаи, когда вы будет хотите, чтобы вложенные HTML-элементы возвращались как часть строки, в других случаях вы не будет и т. д.
const textArr = ["a", "b", "c"];
const el = document.getElementById("main1");
const getIndex = () => textArr.indexOf(el.textContent);
console.info(getIndex());<p id = "main1">b</p>Спасибо, очень помогли. Я действительно не умею задавать вопросы ... У меня действительно есть теги, включенные в текстовый массив, потому что я не мог понять, как просто получить текст
@froggomad Добро пожаловать! :) .. Я действительно помню, когда учился, когда я некоторое время был немного неуверен, как получить текст без HTML-тегов, оказалось, что это было действительно так просто, ха-ха.
Вы можете инвестировать в использование
textContentвместоinnerHTMLпросто потому, чтоinnerHTMLможет возвращать вложенные теги, то естьdiv.innerHTMLбудет или может содержать<p>text</p>и т. д., Вы понимаете ... Кроме того, с предложениемelseвы можете захотеть вернуться - 1? ... Или, как вариант, вернутьtextArr.indexOf(main1.textContent).