Можно ли преобразовать строку в узел?

Я пытаюсь создать генератор случайных имен из установленного списка имен (от 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, и тогда все в порядке.

Я пытаюсь преобразовать то, что появляется как число, в идентификатор, но я не уверен, как это сделать.

Я бы перечитал вашу ветку else, что вы ожидаете от textContent строки? В зависимости от того, где определен ваш s01...s10, вы можете получить его с помощью document.querySelector('#' + num) или чего-то подобного? Или это имена переменных?

Icepickle 30.05.2019 00:12

так, например, если s06.textContent — «Кевин», это то, что я хочу вернуть. Ветвь else - это, безусловно, мое замешательство.

Rachel Irene Lunan 30.05.2019 00:14

@Icepickle Чего вам не хватает, так это того, что идентификаторы элементов автоматически становятся глобальными переменными.

Barmar 30.05.2019 00:15

@Barmar, тогда разве твой ответ не должен быть global[num].textContent? :)

Icepickle 30.05.2019 00:15

Нет, потому что я считаю плохим стилем зависеть от этого, а document.getElementById() — это идиоматический способ.

Barmar 30.05.2019 00:16

идентификаторы определены в html

Rachel Irene Lunan 30.05.2019 00:16

@Icepickle Кстати, это было бы window[num]

Barmar 30.05.2019 00:17

@Barmar, хорошо, я просто хотел помочь ОП критически подумать о написанном коде :)

Icepickle 30.05.2019 00:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы пишете

num = ("s0" + num);

вы просто создаете строку, она не пытается использовать ее как имя переменной. Таким образом, он не обращается к узлу в переменной s06.

Используйте document.getElementById(), чтобы получить элемент с определенным идентификатором, а не пытаться получить к нему доступ как к переменной. Вы можете использовать конкатенацию строк для создания аргумента.

var id = num < 10 ? "s0" + num : "s" + num;
var element = document.getElementById(id);
var numb = element.textContent;

Спасибо, это имеет смысл!

Rachel Irene Lunan 30.05.2019 00:19

Другие вопросы по теме