如何覆盖<base />标签而不删除标签本身?

时间:2012-09-06 15:17:36

标签: html

我正在尝试向使用<base>标记的网站添加一些哈希链接(以内容表的格式,以便于网页导航)。

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

有没有办法绕过基本标签并完成此操作?

5 个答案:

答案 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 的元素之前,所以根据规范,我所做的可能不合法。