Вход

Просмотр полной версии : JS подмена части ULR на лету


stem
22.10.2015, 01:26
Уважаемые знатоки!:help: :help: :help:

Есть описание товара на странице со ссылками на другие товары, ранее сайт переносился с другого домена, поэтому при редактировании в описании в некоторых местах остались абсолютные ссылки с доменом.

<div id="desc">
...какой-то текст...
<a href="https://domain1.com/product-6456.html">Пример 1</a>
<a href="/product-6456.html">Пример 2</a>
<a href="https://domain1.com/product-12.html">Пример 3</a>
<a href="https://newdomain.com/product-1-562.html">Пример 4</a>
и т.д.
</div>
Мне необходимо подменить старый домен domain1.com на newdomain.com во всех ссылках.

Нарыл такой код:
<script>
var a = document.getElementById("desc").firstChild ;
a.href = a.href.replace(/domain1.com/, "newdomain.com") ;
</script>
Но не работает:cray: , пробовал еще вот такие варианты:
<script>
var a = document.getElementById("desc").href ;
a.href = a.href.replace(/domain1.com/, "newdomain.com") ;
</script>
<script>
$a = "https://domain1.com";
document.getElementById('descr').href = $a;
</script>
Безрезультатно. Скрипт вставлял после div.

Товаров много, поэтому заходить в каждый и проверять не вариант. На предыдущем домене работает копия сайта под другие товары, поэтому редирект тоже не вариант.

Прошу прощения сразу, если мой вопрос тупой, но в js я не мастер.

laimas
22.10.2015, 06:07
А каким образом домен попадает в ссылки?

tourniquet
22.10.2015, 11:40
$('#desc').children().each(function() {
var value = $(this).attr('href');

if ($(this).attr('href').indexOf('domain1') !== -1)
$(this).attr('href', value.replace('domain1', 'some'));
});

Вот так можно решить проблему с помощью jQuery.

laimas
22.10.2015, 11:46
Вот так можно решить проблему с помощью jQuery.


Проблему нужно решать на сервере, сдается, что она там была заложена сразу.

tourniquet
22.10.2015, 15:30
laimas,
полностью с вами согласен, но раз человек хочет решить проблему таким образом, я предложил ему такой вот вариант.

laimas
22.10.2015, 16:30
Никаких таких вариантов в принципе не должно быть, иначе это означает углубление проблемы. ;)

stem
23.10.2015, 18:29
А каким образом домен попадает в ссылки?
На старом сайте клиент редактировал товары, и ставил ссылки на другие товары, я 101 раз объяснял и записывал видеоурок какую часть ссылки надо копировать, чтобы домен не вставлять в ссылку. Но клиент тупит временами, тут я уже ничем не могу помочь)))

stem
23.10.2015, 18:34
$('#desc').children().each(function() {
var value = $(this).attr('href');

if ($(this).attr('href').indexOf('domain1') !== -1)
$(this).attr('href', value.replace('domain1', 'some'));
});

Вот так можно решить проблему с помощью jQuery.

Спасибо, этот код в body вставлять или в head?

laimas
23.10.2015, 19:49
На старом сайте клиент редактировал товары, и ставил ссылки на другие товары, я 101 раз объяснял и записывал видеоурок какую часть ссылки надо копировать, чтобы домен не вставлять в ссылку. Но клиент тупит временами, тут я уже ничем не могу помочь)))


Вот чтобы этого не было, ссылки должен формировать серверный скрипт, клиент вообще не должен оперировать ссылками.

stem
24.10.2015, 02:53
Вот чтобы этого не было, ссылки должен формировать серверный скрипт, клиент вообще не должен оперировать ссылками.

Ссылки в редакторе текста проставляются, в данной cms нет возможности настроить редактор на реагирование абсолютных ссылок. При чем тут сервер я не пойму...

laimas
24.10.2015, 03:15
При чем тут сервер я не пойму...

Ну да, а клиент значит причем? Не можете заставить редактор, но кто принимает от редактора данные сервер или клиент?
Домен должен задаваться переменной/константой, значение которой можно получить, тогда и переезды не страшны, и клиент не будет заниматься работой, которой он вообще не должен заниматься.

stem
24.10.2015, 15:09
но кто принимает от редактора данные сервер или клиент?
Домен должен задаваться переменной/константой, значение которой можно получить, тогда и переезды не страшны, и клиент не будет заниматься работой, которой он вообще не должен заниматься.
Клиент этим и не занимается, он просто редактирует. И запрет абсолютных ссылок текущего домена всегда решался на уровне редактора, изначально клиент был уверен в том что копий сайта он точно не захочет, поэтому никто и не задумывался.
В общем я просто поиск и замену по базе сделал запросом.

laimas
24.10.2015, 16:14
Клиент этим и не занимается, он просто редактирует.


Клиент вынужден перебирать DOM структуру а затем еще производить изменения, что уже плохо. Но вы даже не задумываетесь о том, что ваши "битые" ссылки роботы не будут индексировать как ваши внутренние ссылки. И вы еще пытаетесь найти оправдание этой затее?

А нужно на сервере скриптом или в HTML-редакторе, если ссылки в файлах, найти таковые и изменить. И желательно заменить на переменную, и в тексте принимаемом от редактора заменять такие вхождения, или задумайтесь о модуле для своего редактора, который бы позволял работать с внутренними ссылками.

Ну а если вам наплевать и на индексацию, и на то что клиент будет ковыряться постоянно, делайте, я не преследую цель уговорить вас, я предлагаю задуматься.