Я пытаюсь создать генератор случайных имен из установленного списка имен (от 1 до 10). Я присвоил идентификатор каждому имени (от «s01» до «s10») и пытаюсь написать JavaScript, чтобы случайным образом выбрать одно из списка. Это то, что у меня есть до сих пор:
if (action === 'who') {
console.info("who");
let num = Math.floor((Math.random() * 10) + 1);
console.info(num);
if (num === 10) {
numb = s10.textContent;
} else {
num = ("s0"+num);
console.info(num);
numb = num.textContent;
}
console.info(numb);
Но я получаю console.infos как «неопределенный», если только сгенерированное число не равно 10, и тогда все в порядке.
Я пытаюсь преобразовать то, что появляется как число, в идентификатор, но я не уверен, как это сделать.
так, например, если s06.textContent — «Кевин», это то, что я хочу вернуть. Ветвь else - это, безусловно, мое замешательство.
@Icepickle Чего вам не хватает, так это того, что идентификаторы элементов автоматически становятся глобальными переменными.
@Barmar, тогда разве твой ответ не должен быть global[num].textContent
? :)
Нет, потому что я считаю плохим стилем зависеть от этого, а document.getElementById()
— это идиоматический способ.
идентификаторы определены в html
@Icepickle Кстати, это было бы window[num]
@Barmar, хорошо, я просто хотел помочь ОП критически подумать о написанном коде :)
Когда вы пишете
num = ("s0" + num);
вы просто создаете строку, она не пытается использовать ее как имя переменной. Таким образом, он не обращается к узлу в переменной s06
.
Используйте document.getElementById()
, чтобы получить элемент с определенным идентификатором, а не пытаться получить к нему доступ как к переменной. Вы можете использовать конкатенацию строк для создания аргумента.
var id = num < 10 ? "s0" + num : "s" + num;
var element = document.getElementById(id);
var numb = element.textContent;
Спасибо, это имеет смысл!
Я бы перечитал вашу ветку else, что вы ожидаете от
textContent
строки? В зависимости от того, где определен ваш s01...s10, вы можете получить его с помощьюdocument.querySelector('#' + num)
или чего-то подобного? Или это имена переменных?