我正在尝试向使用<base>
标记的网站添加一些哈希链接(以内容表的格式,以便于网页导航)。
现在显然由于基本标记,每个其他相对标记将相对于基本标记href。为了让我创建这个内部内容表,其链接指向特定页面的不同部分,我需要获取默认URL(在基本标记生效之前),以便内部链接可以正常工作。
有没有办法绕过基本标签并完成此操作?
答案 0 :(得分:10)
base
标记的效果对文档是全局的,覆盖<base href="...">
效果的唯一方法是使用绝对网址。
如果通过HTTP检索文档,您可以在JavaScript中使用window.location
来获取页面本身的URL。您可以使用它来构建绝对URL。
这些天通常不需要base
标记。最好使用服务器端技术,使您可以从一个或多个基地址构造地址。所以最好的办法就是摆脱标签。
答案 1 :(得分: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);
}
}
}
);
答案 2 :(得分:1)
在链接之前添加/
应该可以完成工作。我们假设你有<base href="/assets/images/" />
。如果您使用<img src="logo.png" />
,则会加载/assets/images/logo.png
。否则,如果您使用<img src="/logo.png" />
,则会从根目录加载/logo.png
。
答案 3 :(得分:1)
作为一个轻微的替代方案,要拥有本地网址并保留基本数据库,您可以试试这个。
$('a.local').each(
function () {
// get the href attribute
var href = $(this).attr('href');
// does it have a href?
if (href) {
var lastSlash = window.location.toString().lastIndexOf("/");
var new_href = window.location.toString().substr(0, lastSlash + 1) + href;
$(this).attr('href', new_href);
}
});
<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>
答案 4 :(得分:0)
我需要包含一个相对样式表,忽略 href
标记中的 base
。我发现如果将样式表 link
放在 base
标记之前,href
不会受到影响。
我基于此信息:
<块引用>如果指定了以下任一属性,则该元素必须位于其他具有 URL 属性值的元素之前,例如 的 href 属性。
来自https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
我意识到这很可能需要您将 a
标签放在文档 head
中,然后以某种方式设置它们的样式以显示在正确的位置。所以这个技巧可能不太好用。
注意:文档说基本标签“必须”出现在使用 URL 的元素之前,所以根据规范,我所做的可能不合法。