| 
 Замена хештегов на ссылки Всем привет! Подскажите, пожалуйста, по следующей задаче. В тексте документа в div с определенным классом (или id) необходимо заменить хештеги на ссылки. Нашел решение для замены с регулярными выражениями: <div class="aaa">Lorem #hashtag</div> 
var repl = $(".aaa");
repl.each(function() {
var string = $(this).text();
$(this).html(string.replace(/#(\S*)/g,'<a href="http://site.ru/$1">$1</a>'));
});
Но проблема в том, что ссылка с хештегов должны быть не однотипные, например: #one -> site.ru/razdel_1/one #two -> site.ru/razdel_2/two Поэтому, видимо необходимо делать список в js файле с перечислением всех вариантов. И здесь у меня, во-первых, не хватает знаний. А во вторых, если в перечислении будет, например, 500 вариантов замен – насколько сильно это повлияет на работу сайта? Заранее благодарю! | 
| 
 Цитата: 
 | 
| 
 Цитата: 
 
<!DOCTYPE html>
<html>
<head>
<script src='https://code.jquery.com/jquery-latest.min.js'></script>
<!--
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
<script src='tmp.js'></script>
-->
<style>
</style>
<script>
$(_ => {
	const obj = {
		one: 1,
		two: 2
	}
	const re = /#(\S*)/g
	$('.aaa').each((i, o) => {
		o.innerHTML = o.textContent.replace(re, (str, e) => {
			return `<a href="http://site.ru/razdel_${obj[e]}/${e}">${e}</a>`
		})
	})
})
</script>
</head>
<body>
<div class="aaa">Lorem #one</div>
<div class="aaa">Lorem #two</div>
</body>
</html>
 | 
| 
 ksa, благодарю! Код рабочий. Пара уточнений: 1. Допустим заменять необходимо 500 тегов, но путей для ссылок всего 5 видов, например: #one -> site.ru/razdel_1/one #two -> site.ru/razdel_1/two #three -> site.ru/razdel_2/three #four -> site.ru/razdel_2/four ... Получается, что код нужно записать так: 
$(_ => {
	const obj = {
		one: 1,
		two: 1,
    		three: 2,
    		four: 2
	}
Можно ли как то оптимизировать эту часть, объединив хештеги для одного пути, или на скорость исполнения это не повлияет? 2. Насколько безопасно использование innerHTML в данном случае? | 
| 
 Цитата: 
 Цитата: 
 Но, если правильно понимать как работает innerHTML, можно использовать и его. | 
| 
 ksa, понял. Прошу прощения, еще пара новичковских вопросов: 1. Как убрать чувствительность к регистру, то есть, чтобы во всех случаях получался один и тот же результат: #one -> site.ru/razdel_1/one #ONE -> site.ru/razdel_1/one #oNe -> site.ru/razdel_1/one 2. Как сделать, чтобы отсутствующий в списке хештег игнорировался (не преобразовывался в ссылку). Сейчас если в тексте встречает хештег не из списка, то он преобразуется в: #hashtag -> site.ru/razdel_undefined/hashtag | 
| 
 VladKireev, Изменение регистра 
let key = е.toLowerCase();
return obj[key] ? `<a href="http://site.ru/razdel_${obj[key]}/${key}">${e}</a>` :  str
 | 
| 
 Как вариант... 
<!DOCTYPE html>
<html>
<head>
<script src='https://code.jquery.com/jquery-latest.min.js'></script>
<!--
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
<script src='tmp.js'></script>
-->
<style>
</style>
<script>
$(_ => {
	const obj = {
		one: 1,
		two: 2
	}
	const re = /#(\S*)/g
	$('.aaa').each((i, o) => {
		o.innerHTML = o.textContent.replace(re, (str, e) => {
			const key = e.toLocaleLowerCase()
			if (!obj[key]) return str
			return `<a href="http://site.ru/razdel_${obj[key]}/${key}">${e}</a>`
		})
	})
})
</script>
</head>
<body>
<div class="aaa">Lorem #one</div>
<div class="aaa">Lorem #oNe</div>
<div class="aaa">Lorem #two</div>
<div class="aaa">Lorem #Test</div>
</body>
</html>
 | 
| 
 Цитата: 
 | 
| 
 ksa, огромное спасибо! Работает) Единственное, так и не понял, безопасно ли использовать innerHTML или нет.. Планируется, что пользотели будут оставлять комментарии с хештегами, которые после отпарвки комментария должны преобразовываться в ссылки. В этом случае есть риск? | 
| 
 Цитата: 
 Цитата: 
 Тексты в ДОМ записываются в текстовые ноды... Можно их перебирать и изымать из них эти "хеш теги"... И вместо них добавлять созданные ссылки. Вот я тут одному форумчанину пример такой показывал. https://javascript.ru/forum/misc/835...dokumente.html Т.ч. можно работать и с нодами... Я пока не пойму чем ты рискуешь? Какой опасности опасаешься? | 
| 
 Цитата: 
 | 
| 
 И еще возникла проблемка: Предложенный код преобразует весь текст на странице в единый абзац - убирает все <p></p>. Видимо в одну строку? А также стирает ссылки, поставленные вручную. Подскажите, пожалуйста, как исключить такое поведение? | 
| 
 Цитата: 
 смотри пост выше ksa, #11 | 
| 
 Цитата: 
 Мы создаем, они стараются поломать. Смотри как работать с текстовыми нодами. Меняй текст в них. Т.о. ты сузишь им пространство для вредоносности. ;) | 
| Часовой пояс GMT +3, время: 22:53. |