【问题标题】:Prepend Subfolder to All Links with jQuery使用 jQuery 将子文件夹添加到所有链接
【发布时间】:2011-04-30 08:46:44
【问题描述】:

我目前在位于 www.example.com/staging 的暂存环境中的网站上工作。该站点的所有链接都是相对设置的(例如:/about/)。我正在尝试编写一些简单的 jQuery 来将“/staging”添加到页面上的每个链接,因此我不必更改一周内的所有链接,或者它在登台环境中。我知道 HTML 标记是一个选项,但是因为链接是使用 ExpressionEngine 动态添加的,这似乎不起作用。我认为 jQuery 应该相当简单。这是我所拥有的,但有些地方不太正确:

$(function() {
  var href = $('a').attr('href');
  $(href).prepend('/staging');
});

提前感谢您的帮助。

【问题讨论】:

    标签: jquery hyperlink href staging


    【解决方案1】:

    试试这个:

    $(function() {
      $('a').each(function() {
        var href = $(this).attr('href');
        $(this).attr('href', '/staging' + href);
      });
    });

    【讨论】:

    • 完美!这个效果很好。 @shoebox639 的回答似乎将所有 href 更改为 /staging/staging。感谢您的帮助。
    【解决方案2】:
    $(function() {
      $('a').each(function() {
        $(this).attr('href', '/staging' + $(this).attr('href'));
      });
    });
    

    $(href) 没有找到任何东西,因为它只是属性的值。

    【讨论】:

    • 这会将所有链接更改为与页面上的第一个链接相同(带有 staging 前缀)。
    • 哇,我要解决问题了...这里已修复。谢谢你的收获。
    【解决方案3】:

    您发布的 URL 示例(/about//staging)不是相对的;他们是植根的。这些路径不会执行您在此处尝试执行的操作。

    相对 URL 从不以斜杠开头;它们以路径部分(名称或点)开头。以斜线开头会强制浏览器从主机的根目录中查找链接,就像在文件系统中的路径名开头添加斜线一样。

    【讨论】:

      【解决方案4】:

      jQuery 的替代方法是使用<base> 标签。

      添加<base href="http://www.example.com/staging/" /> inside你的<head>标签将使你的所有/about/(等)链接按照你想要的方式工作。

      实际上,我认为这对您不起作用。如果你有像about/ 这样的真实相对链接的URL,它会起作用。 /about/ 不是相对链接。我会在此处留下这个答案,以防有人稍后通过 google 搜索找到此答案并需要 relative 链接的解决方案。

      如果您的 URL 是不太常见的形式 ./about/,那么此解决方案将有效。浏览器会将 URL ./about/ 视为(并显示)为不带 <base> 标记的http://www.example.com/about/,或者如果您以上述方式设置了<base> 标记,则视为http://www.example.com/staging/about/

      【讨论】:

        猜你喜欢
        • 2011-05-17
        • 1970-01-01
        • 2011-08-02
        • 2019-05-13
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        • 2019-08-01
        • 1970-01-01
        相关资源
        最近更新 更多