如果URL包含字符串A但不包含字符串B,则重定向

时间:2018-08-15 16:33:52

标签: javascript redirect url-redirection

这个话题在这里经常被讨论,但是我仍然找不到一个可行的解决方案。

我要检查URL:

If contains String=A, but not String=C redirect to ...
Else if contains String=B, but not String=C redirect to ...
Else if contains String=C redirect to ...
Else redirect to ...

我的代码是:

if (
window.location.href.indexOf('String=A') > -1 && !
window.location.href.indexOf('String=C') > -1 ) {
window.location.href = "/subpage/" + document.location.search + '?#onlya';
}
else if (
window.location.href.indexOf('String=B') > -1 && !
window.location.href.indexOf('String=C') > -1 ) {
window.location.href = "/subpage/" + document.location.search + '#onlyb';
}
else if (
window.location.href.indexOf('String=C') > -1 ) {
window.location.href = "/subpage/" + document.location.search + '#containsc';
}
else {
window.location.href = "/subpage/" + document.location.search + '#foundnothing';
} 

我已经尝试过

window.location.href.indexOf('String=C') != -1

,依此类推。 实际发生了什么:

  • xyz.com?String=A-重定向到“ / subpage#onlya”(正确!)
  • xyz.com?String=B-重定向到“ / subpage#onlyb”(正确!)
  • xyz.com?String=C-重定向到'/ subpage#containsc'(正确!)
  • xyz.com-重定向到“ / subpage#foundnothing”(正确!)

但是:

  • xyz.com?String=A&String=C-重定向到“ / subpage#onlya”(但应重定向到“ / subpage#containsc”

修改后的解决方案:

  if (
    window.location.href.indexOf('String=A') > -1 && !(window.location.href.indexOf('String=C') > -1 )
      ) {
      window.location.href = "/subpage/" + document.location.search + '?#onlya';
  }
  else if (
    window.location.href.indexOf('String=B') > -1 && !(window.location.href.indexOf('String=C') > -1 )
      ) {
      window.location.href = "/subpage/" + document.location.search + '?#onlyb';
  }
  else if (
    window.location.href.indexOf('String=C') > -1
      ) {
      window.location.href = "/subpage/" + document.location.search + '?#containsc';
  }
  else {
      window.location.href = "/subpage/" + document.location.search + '?#foundnothing';
  }

1 个答案:

答案 0 :(得分:1)

indexOf返回找到的字符串的索引;如果找不到,则返回-1。 当您否定它时!除0以外的任何数字都将产生false

条件(给出字符串)!window.location.href.indexOf('String=C') > -1 等效于false > -1的{​​{1}}

您可以通过将其包装为以下内容来获得预期的结果:

true或通过使用波浪号双重否定 !(window.location.href.indexOf('String=C') > -1 )