Сделать дополнение к строке URL href - PullRequest
2 голосов
/ 15 апреля 2019

Мне нужно внести изменения во все гиперссылки на странице, используя Java Script.В настоящее время теги расположены в этом манере

<a href="/Level1/Level2/Level3/bla bla bla.aspx"

Изменение, с которым я действительно борюсь (будучи абсолютным нубом в этой области), как я могу внести следующее изменение и добавить на другом уровне?Его дочерний сайт с такой же структурой;

<a href="/Level1/Level2/Level3/+Level4/bla bla bla.aspx" 

Разделы URL до и после добавления «уровня 4» останутся прежними.Мне нужно, чтобы это изменение было применено ко всем гиперссылкам на странице, на которых уже нет части 4-го уровня.

Извинения за шокирующий запрос.Первый раз.

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

Получить все hrefs - если href не имеет требуемого уровня 4, добавьте уровень с помощью простого .replace () с добавленным уровнем - затем примените как атрибут href.

Обратите внимание, что ссылки1 и 3 не имеют уровня 4, поэтому на них будет влиять условие if, тогда как ссылка 2 уже имеет его, поэтому оно не будет затронуто.

let links = document.querySelectorAll('a');

links.forEach(function(link) {
 let originalHref = link.getAttribute('href');
 if(originalHref.indexOf('+Level4') == -1) {
   link.setAttribute('href', originalHref.replace('Level3/','Level3/+Level4/'));
 }
})
a {
 display: block;
 margin-bottom: 8px;
}
<a href="/Level1/Level2/Level3/option1.aspx">Option 1</a>
<a href="/Level1/Level2/Level3/+Level4/option2.aspx">Option 2</a>
<a href="/Level1/Level2/Level3/option3.aspx">Option 3</a>
0 голосов
/ 15 апреля 2019

location.href дает вам url так:

var currentUrl= location.href;
currentUrl = currentUrl.replace("level1","level1/level2")
location.href = currentUrl;

Я не понимаю вас ясно, но это должно решить вашу проблему.

0 голосов
/ 15 апреля 2019

Попробуйте

document.querySelectorAll('a').forEach(a=> 
 a.href= a.href.replace(/(\/Level1\/Level2\/Level3)(?!\/Laravel4)/,"$1/+Laravel4"));

объяснение регулярного выражения

  • (\/Level1\/Level2\/Level3) найти ссылки с префиксом (группа $ 1)
  • (?!\/Laravel4), но не содержащие Laravel4
  • "$1/+Laravel4" заменить совпадающую строку (группа $ 1) на группу $ 1 с суффиксом

document.querySelectorAll('a').forEach(a=> 
 a.href= a.href.replace(/(\/Level1\/Level2\/Level3)(?!\/Laravel4)/,"$1/+Laravel4"));
  
  
// INFO
document.querySelectorAll('a').forEach(a=>console.log(a.href));
<a href="/Level1/Level2/Level3/bla bla bla.aspx">link 1</a>
<a href="/Level1/Level2/Level3/Laravel4/terefere.aspx">link 2</a>
<a href="/Level1/Level2/Level3/zzzz.aspx">link 3</a>
...