用于条件URL的Javascript基于window.location.href附加或重定向

时间:2010-04-05 08:19:01

标签: javascript url conditional append bookmarklet

我正在尝试制作一个书签,当点击它时会检查当前标签/窗口的URL,看它是否包含'char1'和/或'char2'(给定字符)。如果两个字符都存在,则重定向到另一个URL,对于另外两个字符,它将分别附加当前URL。

我相信必须有一个更优雅的方式陈述这个比以下(迄今为止我的工作完美)但我对Javascript知之甚少。我的(笨重的和重复的)工作代码(道歉):

if (window.location.href.indexOf('char1') != -1 &&
    window.location.href.indexOf('char2') != -1)
{
    window.location="https://website.com/";
}
else if (window.location.href.indexOf('char1') != -1)
{
    window.location.assign(window.location.href += 'append1');
}
else if (window.location.href.indexOf('char2') != -1)
{
    window.location.assign(window.location.href += 'append2');
}

我到底需要它,但是......至少可以说不是很优雅。

是否有一种更简单的方法可以使用vars或伪对象?还是更好的代码?

4 个答案:

答案 0 :(得分:2)

对dthorpe的建议进行重构(

var hasC1  = window.location.href.indexOf('char1')!=-1
var hasC2  = window.location.href.indexOf('char2')!=-1
var newLoc = hasC1 
               ? hasC2 ? "https://website.com/" : window.location.href+'append1'
               : hasC2 ? window.location.href+'append1' : '';

if (newLoc)
    window.location = newLoc;

调用assign与为window.location分配值相同,无论如何,您都在使用方法中的添加分配+=运算符:

window.location.assign(window.location.href+='append2')

这实际上会在调用assign方法之前将“append2”分配给window.location.href的末尾,使其变得多余。

您还可以通过将window.location设置为var。

来减少DOM查找

答案 1 :(得分:1)

我能看到的唯一减少是将多余的调用索引拉入变量,然后测试变量。但是,它不会在性能方面产生任何明显的差异。

var hasChar1 = window.location.href.indexOf('char1') != -1;
var hasChar2 = window.location.href.indexOf('char2') != -1;
if (hasChar1)
{
   if (hasChar2)
   {
      window.location="https://website.com/";
   }
   else
   {
      window.location.assign(window.location.href+='append1');
   }
} 
else if (hasChar2)
{
    window.location.assign(window.location.href+='append2');
}

答案 2 :(得分:1)

一种可扩展的代码。我疯了吗?

var loc = window.location.href;
var arr = [{
  url: "https://website.com/",
  chars: ["char1", "char2"]
}, {
  url: loc + "append1",
  chars: ["char1"]
}, {
  url: loc + "append2",
  chars: ["char2"]
}];

function containsChars(str, chars)
{
  var contains = true;
  for(index in chars) {
    if(str.indexOf(chars[index]) == -1) {
      contains = false;
      break;
    }
  }
  return contains;
}

for(index in arr) {
 var item = arr[index];
 if(containsChars(loc, item.chars)) {
    window.location.href = item.url;
    break;
 }
}

答案 3 :(得分:0)

var location = window.location.href

if (location.indexOf('char1')!=-1 &&  location.indexOf('char2')!=-1)
{window.location="https://website.com/";} 
else if (location.href.indexOf('char1')!=-1) {window.location.assign(location+='append1');}
else if (location.indexOf('char2')!=-1) {window.location.assign(location+='append2');}