Home > Blockchain >  Check if a hash is the first element after first slash in href
Check if a hash is the first element after first slash in href

Time:10-28

I have a menu with links that may look like one of the following:

mywebsite.com/#find
mywebsite.com/about-us/#team
mywebsite.com/#social
mywebsite.com/services/#something

I want to do something only to the first and third links (the ones that don't have a subdirectory in the url path). How do I check if a # hash is the first element after the first slash in the link?

$('#menu a').click(function() {
    
  var target = this.href;

  // check if "/#" is the first thing after the domain name
 
});

Thank you.

CodePudding user response:

The URL class that parse URLs can help you. URL.pathname property contain path of url (string after domain)

$('#menu a').click(function(e) {
  if (new URL(this.href).pathname == "/"){
    // Do something
  }
});

More accurate mode is

$('#menu a').click(function(e) {
  let url = new URL(this.href)
  if (url.pathname == "/" && url.hash != ''){
    // Do something
  }
});

$('#menu a').click(function(e) {
  e.preventDefault();
  if (new URL(this.href).pathname == "/")
    console.log("true");
});
a {display: block}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="menu">
  <a href="http://mywebsite.com/#find">mywebsite.com/#find</a>
  <a href="http://mywebsite.com/about-us/#team">mywebsite.com/about-us/#team</a>
  <a href="http://mywebsite.com/#social">mywebsite.com/#social</a>
  <a href="http://mywebsite.com/services/#something">mywebsite.com/services/#something</a>
</div>

CodePudding user response:

Let's first ignore the https:// part then find the first / and hope to find a # after it.

var tests = `mywebsite.com/#find
mywebsite.com/about-us/#team
https://mywebsite.com/#social
mywebsite.com/services/#something`.split("\n");

function isMyHash(url) {
  var start = url.indexOf("://") > -1 ? url.indexOf("://")   3 : 0;
  start = url.indexOf("/", start);
  return (url.substring(start   1, start   2) == '#')

}

tests.forEach(function(test) {
  console.log(test, isMyHash(test) ? "✔" : "x")
})

  • Related