【问题标题】:Change body by if else statement - url通过 if else 语句更改正文 - url
【发布时间】:2025-12-11 17:00:01
【问题描述】:

如果 url 是子域 http://one.example.com/dsnknw?211218 则显示 div 1,如果 http://two.example.com/ppppnw?201218 则显示 div 2。

每个身体都有背景图片

<style>
#siteone {
background: url(http://example.info/backgroundone.PNG); 
    background-repeat: no-repeat;
    background-size:cover;
    }
#sitetwo {
    background: url(http://example.info/backgroundtwo.PNG); 
    background-repeat: no-repeat;
    background-size:cover;
    }
</style>

以及相关的链接:

<div id="one">
<a id="link1" href="https://click.com" target="_top"></a>
</div>

<div id="two">
<a id="link2" href="https://click2.com" target="_top"></a>
</div>

我尝试了一些代码,包括

document.getElementById("body")

Class of ID Change based on URL - URL Based Image Swap - Creating Conditional Statement Based On Page URL

【问题讨论】:

  • 为什么不在你的每一个页面body上放一个class,为每个body.otherClass制定不同的css规则呢?然后根本不需要javascript。
  • only one body per document。考虑到这一点,您应该改写您的问题。 document.getElementById("body") 没有意义,因为您没有将任何东西的 id 设置为“body”。您的意思可能是document.querySelector("body"),或者更好的是document.body。您的问题应该显示您尝试过的、实际与预期的行为错误消息。最好的办法是创建一个简单的可重现示例
  • 对我来说整个问题都是背景。它只在 body 中正确显示,而不是在 div 中

标签: javascript if-statement getelementbyid


【解决方案1】:

根据 Juan 的评论,两个 body 标签不是一个可行的方法。 https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Sectioning_root。您应该改用父包装器。

<div class="parent">
<a id="link2" href="https://click.com" target="_top"></a>
</div>

使用window.location 将帮助您解析当前 URL,以便您可以正确地做您需要的事情。

我要做的是查询具有window.location.href href 属性的元素,然后获取.parentElement 以获取直接父级。

const url = window.location.href;
const targetParent = document.querySelector('.parent a[href="' + url + '"]').parentElement;

targetBody.style.display = "block";

如果&lt;a&gt; 位于更深处,这将不起作用。既然如此,我会说为父级添加另一个属性,以便我们可以直接查询它。

<div class="parent" url="https://click.com">
<a id="link2" href="https://click.com" target="_top"></a>
</div>

然后

const url = window.location.href;
const targetParent = document.querySelector('.parent[url="' + url + '"]').parentElement;

如果您的网址有其他额外的字符串,例如http://click.com?id=foobar,那么这也不起作用。您必须手动连接来自 window.location 的其他属性,这样您才能获得所需的内容。

const baseDomainWithSubPath = window.location.origin + "/" + window.location.pathname;
const baseDomain = window.location.origin;
const subDomain = window.location.pathname;

【讨论】:

  • 即使你放了两个body标签,也只会创建一个。这个答案没有意义。见developer.mozilla.org/en-US/docs/Web/HTML/…
  • @JuanMendes 这就是为什么我从帖子的开头和结尾清楚地说明了我的困惑。正如我推测的那样,这将会有重大问题,但我不能 100% 肯定会完全无视它,因为我懒得研究。为什么你认为它没有意义超出了我的理解,只需用两个父 div 替换有问题的 body 标签就足够合理了
  • “我懒得研究”。那么你不应该发布答案,发表你的想法的评论。如果你真的很懒,你不会花时间写一个你不相信的答案;)
  • @JuanMendes 所以我应该发表我的答案长度的评论?好主意。因为我只知道我在那里写的任何代码,我过去做了很多,只是没有使用 body 标签。说我对自己的答案没有信心是在黑暗中开枪
  • @JuanMendes 我将对其进行编辑以忽略正文标签并改用父包装器。所以它最终会产生至少 1% 的意义