0

in javascript、与えられた有効なurl、たとえば、

http://seeplai2.trailsandtribulations.nat/admin/items?var=val#here

にあるオリジン、パス名、検索、およびハッシュを抽出する式は何window.locationですか?

で比較的弱いregxので、ここに私の推測があります:

origin: href.match(/(.*?)(\/|\?|#))[1]

pathname: href.match(\/\/[^\/]*([^\?#]*)/)[1]

search: (href.indexOf('?')>-1) ? href.match(/\?[^#]*)/)[1] : ''

hash: (href.indexOf('#')>-1) ? href.match(/(#.*)/)[1] : ''

これらは正しく見えますか?

サンプルコードは次のとおりです。

<a href='/path?var=val1' onclick='doClick(event)'>Anchor1</a>

function doClick(e) {

  var href = e.target.href;
  var origin = href.match(/regx/)[1];

  // if different origin, go there
  if( origin != window.location.origin ) return;

  // if only hash difference, let default take over
  ...

  // if path different, process here
  ...
}
4

1 に答える 1

1

正規表現を使用する理由

var link = document.createElement("a")
link.setAttribute("href","http://seeplai2.trailsandtribulations.nat/admin/items?var=val#here");
alert(link.search)

起源を比較するには、より互換性のあるものを使用します

location.protocol + "//" + location.hostname

例えば

window.onload=function() {
  var winOrigin = location.protocol+"//"+location.hostname;
  var links = document.links;
  for (var i=0,n=links.length;i<n;i++) {
    links[i].onclick=function() {
      var linkOrigin = this.protocol + "//" + this.hostname;
      alert(winOrigin===linkOrigin);
    }
  }
}

デモ;

于 2013-04-14T09:43:40.330 に答える