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