2012-09-06 28 views
11

我试图添加一些散列链接(以内容表的格式,以便于网页导航)到本网站,其中使用<base>标签。如何重写<base>标签而不移除标签本身?

现在显然由于基本标签,每隔一个相对标签将相对于基本标签href。为了让我用指向特定页面不同部分的链接创建这个内部内容表,我需要获取默认URL(在base标记生效之前),以便内部链接可以正常工作。

有没有办法避开基地标签并完成此操作?

+0

“内部链接指向特定页面的不同部分” ......你说的是哈希链接,如:'HREF = “#标签-2”'?你能举个例子吗? –

回答

8

base标记的效果对文档而言是全局的,覆盖<base href="...">效果的唯一方法是使用绝对URL。

如果通过HTTP检索文档,您可以在JavaScript中使用window.location来获取页面本身的URL。你可以用它来构建绝对的URL。

这些日子通常不需要base标签。使用服务器端技术可以让您从一个或多个基地址构建地址,这样更好。所以很可能最好的办法是摆脱标签。

+1

我使用的电子商务软件不幸*依赖于''标签*,所以它仍然存在。可能鲜为人知的事实:如果你的base是一个子目录,'../ relative'链接可以和base标签一起工作。 –

+1

以../开头的链接自然地与包含路径部分中的段的基地址一起工作。然后,您不会覆盖“基本”标签,只是在其影响下移动。 –

+0

非常感谢。我设法得到我的网页的默认网址。 – sSmacKk

3

你可以“修复”该用一些JavaScript和jQuery -

// get all the internal anchors inside #article 
$('#article a').each(
     function() { 
      // get the href attribute 
      href = $(this).attr('href'); 
      // does it have a href? 
      if (href) { 
       // does it have an internal anchor? 
       if (href.match(/#/i)) { 
        // append window.location and write back to the href Attribute 
        new_href = window.location + href; 
        $(this).attr('href', new_href); 
       } 
      } 
     } 
    ); 
+1

感谢您的回答。定义变量时最好使用'var',否则它们将在全局范围内定义。 –

1

添加/前链路应该做的工作。假设您有<base href="/assets/images/" />。如果您使用<img src="logo.png" />,则会加载/assets/images/logo.png。否则,如果您使用<img src="/logo.png" />,它会从根目录加载/logo.png

+0

*添加一个/ *是一半正确的......假设你刚刚跳过了协议并离开了double'//'。 – yckart

1

作为一个轻微的选择,有本地url和保持基础href你可以试试这个。

$('a.local').each(
 
    function() { 
 
\t \t // get the href attribute 
 
\t \t var href = $(this).attr('href'); 
 
\t \t // does it have a href? 
 
\t \t if (href) { 
 
\t \t \t var lastSlash = window.location.toString().lastIndexOf("/"); 
 
\t \t \t var new_href = window.location.toString().substr(0, lastSlash + 1) + href; 
 
\t \t \t $(this).attr('href', new_href); 
 
\t \t } 
 
\t });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<base href="http://www.google.com"> 
 
<a class="local" href="mylocalpage.html">local page</a> 
 
<a href="pageOnRemoteServer.html">remote page</a>

相关问题