给定一个包含带有单词的文本的段落。确保当您单击本段中的任何单词时,该单词将以红色突出显示。
使用 li、input 和其他不会产生任何问题,因为您可以在那里使用querySelectorAll。但文本有问题)我的代码如下(其中一切都是错误的,但仍然):
let p = document.querySelector("p"); // Получаю доступ к P
p.addEventListener("click", function() { // здесь уже ошибка - я обрабатываю клик по параграфу, а надо по слову:D
let pText = document
.querySelector("p")
.innerText.split(" ") // получаю массив с текстом из параграфа и пытаюсь его перебрать
.forEach(
(word) => ((p.innerHTML = word), (p.style.color = "red")) // Белеберда, в которой я пытался.... добавить слово в параграф... и покрасить параграф в красный цвет. Ну что написал, то и получил)
);
});
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Culpa quod nostrum nemo, quis ipsum officiis cum id, placeat temporibus soluta tenetur consequatur illum vel autem assumenda corrupti dolor molestias consectetur!
</p>
有一个想法可以使用for of来检查它,但这并不能解决问题。我会在等待大师答复的同时尝试)
我会尝试把问题分成几个部分
答:“它以红色突出显示” - 这可以通过 来完成
CSS。我们将创建一个类,将文本颜色更改为红色,并且当单击单词时我们将添加或删除此类。.red { color: red; }B.“每个单词” - 我们需要将段落文本分成单独的单词,以便分别单击每个单词。为此,您可以使用 方法
split(" "),该方法将用空格分隔文本。const words = p.innerText.split(" ");B.“来自段落”-我们需要处理段落内的文本。首先我们通过
document.querySelector或访问该段落getElementById。const p = document.getElementById("text");D.“来自单词数组” - 一旦段落文本被划分为单词数组,我们需要将每个单词包装在一个元素中
span以使其可点击。然后,对于每个单词,我们添加一个事件处理程序click来切换类.redwords.forEach((word) => { const span = document.createElement("span"); span.innerText = word + " "; // добавляем пробел после слова span.addEventListener("click", function () { this.classList.toggle("red"); // переключаем класс при клике }); p.appendChild(span); // добавляем слово обратно в параграф });J. ...我们还需要添加检查,例如,这是一个单词而不是破折号,但由于问题没有说明这一点(只有单词或其他东西),所以我们不进行检查...