【问题标题】:windows.location.pathname not workingwindows.location.pathname 不工作
【发布时间】:2013-09-05 02:13:49
【问题描述】:

我的一个案例无法正常工作。它们都可以工作,除了一个,它实际上在 URL 中有查询,但它们总是相同的。查询 URL 如下所示:http://mywebsite.com/search/?q=label:Web-Design|label:Graphic-Design|label:Identity-Design|label:Brand-Design

它不起作用,我想知道 windows.location 是否支持 URL 中的查询。在我看来这无关紧要,但无论哪种方式我都无法正常工作。

我 100% 肯定这是正确的路径名,因为我复制并粘贴了它,只是为了像其他域一样删除域。

这是我正在使用的:

    <script type='text/javascript'>
      $(document).ready(function(){
        switch (window.location.pathname) {
          default:
              $('.nav-blog').addClass('current');
              break;
          case '/p/about.html':
              $('.nav-about').addClass('current');
              break;
          case '/':
              $('.nav-home').addClass('current');
              break;
          case '/search/blog':
              $('.nav-blog').addClass('current');
              break;
          case '/p/forums.html':
              $('.nav-forums').addClass('current');
              break;
          case '/search/?q=label:Web-Design|label:Graphic-Design|label:Identity-Design|label:Brand-Design':
              $('.nav-design').addClass('current');
              break;
          case '/p/photography.html':
              $('.nav-photography').addClass('current');
              break;
          case '/p/hosting.html':
              $('.nav-hosting').addClass('current');
              break;
        }
      });
    </script>

【问题讨论】:

  • 使用调试器单步调试您的代码。如果您检查window.location.pathname 的值,应该很明显。
  • 我不知道这是否有帮助,但我总是将我的默认设置作为选择列表中的最后一个选项,看看它是否解决了你的问题......我不认为它会试一试看看。
  • windows.location.pathname 不包含查询字符串
  • window.location.path + window.location.search 但正如我在回答中所说,如果由于某种原因它们末尾有查询字符串,其他情况将失败。此外,您的开关目前是区分大小写的,您可能需要将搜索大小写从开关中分离出来,并首先检查路径是否与 /search/ 匹配,如果它确实检查查询字符串(如果没有进入开关)。
  • Chrome 的开发工具远不止一个控制台。有一个内置的调试器。developers.google.com/chrome-developer-tools/docs/…

标签: javascript


【解决方案1】:

更改开关中的变量以包含查询字符串

$(document).ready(function(){
        switch (window.location.pathname + window.location.search) {
          default:
              $('.nav-blog').addClass('current');
              break;
              case '/p/about.html':
              $('.nav-about').addClass('current');
              break;
              case '/':
              $('.nav-home').addClass('current');
              break;
              case '/search/blog':
              $('.nav-blog').addClass('current');
              break;
              case '/p/forums.html':
              $('.nav-forums').addClass('current');
              break;
              case '/search/?q=label:Web-Design|label:Graphic-Design|label:Identity-Design|label:Brand-Design':
              $('.nav-design').addClass('current');
              break;
              case '/p/photography.html':
              $('.nav-photography').addClass('current');
              break;
              case '/p/hosting.html':
              $('.nav-hosting').addClass('current');
              break;
        }
      });

但是,如果它们最后有查询字符串,这将与其他情况不匹配,而且目前您的 switch 语句是区分大小写的,您可能应该 toUpperCase()toLowerCase() 您的 switch。

这应该可以解决您的大部分问题:

$(document).ready(function(){
    var path = window.location.pathname.toLowerCase();
    if(path == '/search/')
    {
        if(window.location.search.toLowerCase() == '?q=label:web-design|label:graphic-design|label:identity-design|label:brand-design')
            $('.nav-design').addClass('current');
        else
            $('.nav-blog').addClass('current');
    }
    else
    {
        switch (path) {
          default:
            $('.nav-blog').addClass('current');
            break;

            case '/p/about.html':
                $('.nav-about').addClass('current');
                break;

            case '/':
                $('.nav-home').addClass('current');
                break;

            case '/search/blog':
                $('.nav-blog').addClass('current');
                break;

            case '/p/forums.html':
                $('.nav-forums').addClass('current');
                break;

            case '/p/photography.html':
                $('.nav-photography').addClass('current');
                break;

            case '/p/hosting.html':
                $('.nav-hosting').addClass('current');
                break;
        }
    }
});

您应该比我在这里对您的输入(window.location.pathwindow.location.search)进行更多的清理,例如修剪它们(删除前导和尾随空格)并删除前导和尾随斜杠等。

如果由于某种原因您的查询字符串值的顺序不同,会发生什么情况?

这样的事情可能会发生,例如有人通过电子邮件发送一个链接,并且它在末尾或查询字符串中的某处有一个额外的空格,当收件人单击链接时,他们可能会转到正确的页面,但您的开关将点击默认值.

【讨论】:

  • 第二个选项对我有用,但我需要更多时间来更好地理解它。整个 toLowerCase() 让我有点失望......
  • 第一个对我也有用。据我了解,我不知道 windows.location.search。这为我打开了新的大门,以便我可以解决其他相关问题。谢谢。
  • toLowerCase 基本上将字符串中的所有字符转换为对应的小写字符等 A 转换为 a,B 转换为 b,C 转换为 c 等在比较字符串时,您可以将要比较的字符串都转换为小写允许您执行不区分大小写的比较。有关更多信息,请参阅此问题 - stackoverflow.com/questions/4919403/…
猜你喜欢
  • 2015-12-27
  • 2021-01-10
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2018-12-22
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多