2

I have the need to make changes to all hyperlinks on a page using Java Script. Currently the the tags are laid out in this maner

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

The change I am really struggling with (Being a absolute Noob in this field) is how i can make the following change and add in another level? Its subsite with the same structure;

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

Sections of the URL pre and post the addition of "level 4" will remain the same. I need this change to be applied to all Hyperlinks on the page that do not have the level 4 portion already present.

Apologies for the shocking request. First time posting.

1
  • Loop all <a> with if (a.href.indexOf('Level4') == -1) a.href = a.href.replace('Level3/', 'Level3/+Level4/') Commented Apr 15, 2019 at 6:12

3 Answers 3

1

Get all the hrefs - if the href does not have the required level 4 then add the level with a simple .replace() with the addded level - then apply as the href attribute.

Note that links 1 and 3 do not have the level 4 so will be affected by the if condition, wherease the link 2 already has it so it will not be affected.

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>

Sign up to request clarification or add additional context in comments.

Comments

0

Try

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

regexp explanation

  • (\/Level1\/Level2\/Level3) find links with prefix (group $1)
  • (?!\/Laravel4) but not containing Laravel4
  • "$1/+Laravel4" replace matched string(group $1) with group $1 with suffix

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>

Comments

0

location.href is gave you tu url so:

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

I don't understand you clearly but this need to be solve your problem.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.