Обернуть каждое слово в тег

180
12 октября 2018, 17:10

Возможно ли обернуть каждое слово по отдельности в тег ? На примере текста : Cras ultricies ligula sed magna dictum porta только что бы каждое слово было по отдельности в теге

var container = document.querySelector(".symbols"); 
var str = container.innerHTML; 
 
for(var i = 0; i < str.length; i++) 
{ 
  var e = document.createElement("span"); 
  e.innerHTML = str[i]; 
  container.appendChild(e); 
}
   <div class="symbols">lorem ipsum sit ammet dolar </div>

Вот так пробовал - получается обернуть только предложение

Answer 1

Приведенный вами код можно преобразовать к такому виду:

var container = document.querySelector(".symbols"); 
var arr = container.innerHTML.split(/\s+/); 
var str = ''; 
 
for(var i = 0; i < arr.length; i++) 
{ 
    if(arr[i]){ 
        arr[i] = '<span>'+arr[i]+'</span>'; 
    } 
} 
 
container.innerHTML = arr.join(' ');
   <div class="symbols">lorem ipsum sit ammet dolar </div>

Здесь множественные пробелы учитываются, но не переносятся в окончательный вариант (заменяются одним пробелом).

Answer 2

Например можно так (ES6):

str.split(' ').map(s => `<div>${s}</div>`).join(' ')

Или, если нет возможности использовать шаблонные строки и arrow-функции:

str.split(' ').map(function (s) { return '<div>' + s + '</div>'; }).join(' ');

Вообще говоря, точная реализация зависит от контекста.

Answer 3

Проблема кода в вопросе в том, что цикл идет по символам строки, а не по словам, поэтому оборачивается каждый символ.

Для исправления нужно идти по словам.

Либо, как вариант, воспользоваться методом replace с регулярным выражением

var container = document.querySelector(".symbols"); 
var str = container.innerHTML; 
container.innerHTML = str.replace(/\b[^\s]+?\b/g, $0 => `<span>${$0}</span>`);
span { 
  border: 1px solid green; 
}
<div class="symbols">Cras ultricies ligula sed magna dictum porta</div>

READ ALSO
Не могу разбить блок &lt;div&gt; на две равных части для моего контента

Не могу разбить блок <div> на две равных части для моего контента

Верстаю блок в котором нужно 2 блокаПервый для полей регистрации, второй для картинки

156
При загрузке страницы скрипт ведет себя по-разному

При загрузке страницы скрипт ведет себя по-разному

Есть скрипт, который должен имитировать background-size: cover при работе с img в произвольном блокеСкрипт высчитывает соотношение сторон блока-обертки...

176
Magnific-popup не работает на одной странице

Magnific-popup не работает на одной странице

На сайте 4 страницы идентичны, а главная отличается, вот на ней и не работает magnific-popup, на странице форму не скрывает, при клике не отображаетНа...

161
Uncaught TypeError: Cannot read property &#39;fn&#39; of undefined после использования bootstrap.min.js

Uncaught TypeError: Cannot read property 'fn' of undefined после использования bootstrap.min.js

Не могу понять в чем делона странице Списка контактов в joomla 3 не работает bootsrap

228