Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.08.2017, 19:12
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Обернуть <ol> в <p> - проблема с многострочностью
Есть необходимость во входных данных формы оборачивать все списки <ol> в тег <p>.
Первоначально попытался это сделать так
text = text.replace(/(<ol>.*<\/ol>)/g, '<p>$1</p>');


Так не сработало. Как выснилось, дело в переводах строки, потому что если убрать переносы строки, чтобы код списка был одной строкой,
то всё работает.

Попытался учесть переводы строки в регекспе
text = text.replace(/(<ol>[\s\S].*[\s\S]<\/ol>)/gm, '<p>$1</p>');


Но ничего не изменилось.
Сделал простой тест. Вот в этом случае список оборачивается в <p></p>
var list = '<ol>'+   
'<li>item1</li>'+   
'<li>item2</li>'+   
'<li>item3</li>'+  
'</ol>';
list = list.replace(/(<ol>[\s\S].*[\s\S]<\/ol>)/gm, '<p>$1</p>');
alert(list);



а вот в этом нет:

var list = '<ol>\n'+   
'<li>item1</li>\n'+   
'<li>item2</li>\n'+   
'<li>item3</li>\n'+  
'</ol>';
list = list.replace(/(<ol>[\s\S].*[\s\S]<\/ol>)/gm, '<p>$1</p>');
alert(list);


Получается обернуть в <p>, если предварительно удалить символы перевода строки, но такой способ мне не подходит - нарушается логика обработки остального текста.
Ответить с цитированием
  #2 (permalink)  
Старый 07.08.2017, 19:23
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

$("ol").wrap("<p></p>");

так нельзя?
Ответить с цитированием
  #3 (permalink)  
Старый 07.08.2017, 19:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

WalterScott,
var list = '<ol>\n'+
'<li>item1</li>\n'+
'<li>item2</li>\n'+
'<li>item3</li>\n'+
'</ol>';
list = list.replace(/(<ol>[\s\S]*?<\/ol>)/gm, '<p>$1</p>');
alert(list);
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2017, 12:30
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Сообщение от рони Посмотреть сообщение
WalterScott,
var list = '<ol>\n'+
'<li>item1</li>\n'+
'<li>item2</li>\n'+
'<li>item3</li>\n'+
'</ol>';
list = list.replace(/(<ol>[\s\S]*?<\/ol>)/gm, '<p>$1</p>');
alert(list);
Да, так работает, спасибо.



Сообщение от j0hnik Посмотреть сообщение
$("ol").wrap("<p></p>");

так нельзя?
jQuery в этом скрипте в принципе доступен. Наверное можно, но я не разбирался, как это применить именно к вводу формы.
Ответить с цитированием
  #5 (permalink)  
Старый 08.08.2017, 13:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от j0hnik Посмотреть сообщение
$("ol").wrap("<p></p>");

так нельзя?
Ну это уже не совсем строка с текстом получится... Это будет объект жиКвери.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск