Взять каждую дробь в тексте в span
Дан абзац, содержащий текст со словами и с дробями вида 1/2. Дана также кнопка. По клику на кнопку возьмите каждую дробь в свой тег span. В коде ниже я смог обернуть каждый элемент в span, но с оборачиванием простых дробей у меня беда. Пытался и через регулярку (так как в массиве строковые значния), и проверить слова через includes, но выходило не то что нужно)
let p = document.querySelector("p");
let res = [];
document.querySelector("button").addEventListener("click", function() {
let arr = p.innerText.split(" ").forEach((word) => { //делаю перебор всех элементов массива
let elem = document.createElement("span"); // создаю span
elem.innerText = word; // добавляю в span слова
res.push(elem.outerHTML);
// отправляю все слова со span в массив
});
p.innerHTML = res.join(" ");
// заменяю исходный текст текстом в span элементах
});
<p>
Lorem 1/2 ipsum dolor sit amet, 2/4 consectetur adipisicing elit. 3/6 Pariatur enim 4/8 omnis non blanditiis, dolore illo ullam labore autem sit. Illum beatae dolores ipsam blanditiis excepturi reiciendis quibusdam necessitatibus error atque.
</p>
<button>Press me</button> <br />
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Что-то многовато у Вас кода... Есть подозрение, что можно сделать проще, если допускаются регулярные выражения, и нет другой разметки в тексте:
let p = document.querySelector('p');
document.querySelector('button').addEventListener('click', function() {
p.innerHTML = p.textContent.replace(/\d+\/\d+/g, '<span class="fract">$&</span>')
});
.fract { color: red; }
<p>
Lorem 1/2 ipsum dolor sit amet, 2/4 consectetur adipisicing elit. 3/6 Pariatur enim 4/8 omnis non blanditiis, dolore illo ullam labore autem sit. Illum beatae dolores ipsam blanditiis excepturi reiciendis quibusdam necessitatibus error atque.
</p>
<button>Press me</button>