【问题标题】:Open page with everything hidden except what the URL says to open打开页面,隐藏所有内容,除了 URL 说要打开的内容
【发布时间】:2021-06-11 07:03:41
【问题描述】:

How to link to a <div> on another page? 正在展示如何将Link text 转换为 div id,但我要做的是编写一个网页,该网页与其他页面链接,但隐藏了所有内容,但链接 id 表示要显示的内容。 o page1链接到infopage.html,内容A可见,page2链接到infopage.html,内容B可见,page3链接到infopage.html,内容C可见,依此类推。使用普通的HTMLCSSvanilla JavaScript。请不要jQuery;试图了解这将如何联系在一起。希望我解释得足够清楚

【问题讨论】:

  • 没有那么简单。如果那是在外部站点上,那么您不能。您无法控制另一个网站并更改其样式。可能您可以使用 iframe 制作某些内容并覆盖样式,但这也可能会触发法律诉讼。否则,如果您谈论您的网站,您可以使用:target 选择器。或者查看 SPA(单页应用程序)。
  • 您想使用相同的域,如example.com,然后使用路径来显示或隐藏某些项目,如example.com/showCertainPart,还是使用不同的域来显示特定于该域的数据?
  • 是的,它们都是同一个域。仅限前端,请不要使用 jquery。

标签: javascript html css


【解决方案1】:

一种选择是使用:target 选择器。

您使用display: none; 隐藏了CSS 中的所有内容。然后你可以使用*:target { display: block; }在点击链接时显示内容

如果您想从其他网站加载内容,您可以使用PHP includeiframe。但是,您不能轻易地仅显示网站的特定部分。您需要使用上述相同的方法覆盖其默认样式。

main > div {
  display: none;
}

main > div:target {
  display: block;
}


/* For Styling Pupose only */

nav ul {
  display: flex;
  list-style: none;
}

nav li {
  margin: 0 10px;
}
<nav>
  <ul>
    <li><a href="#A">Content A</a></li>
    <li><a href="#B">Content B</a></li>
    <li><a href="#C">Content C</a></li>
  </ul>
</nav>

<main>
  <div id="A">This is Content A</div>
  <div id="B">This is Content B</div>
  <div id="C">This is Content C</div>
</main>

【讨论】:

    【解决方案2】:

    这是实现这一目标的一种快速而肮脏的方法:

    • 默认隐藏所有文章
    • window.location.href.split('#')[1] 将为您提供锚名称
    • classList.remove('hidden') 从选中的文章中移除隐藏类

    page1.html

    <style> .hidden { display: none; }</style>
    
    <div id="article1" class="hidden"><h2>Article 1</h2></div>
    <div id="article2" class="hidden"><h2>Article 2</h2></div>
    
    <p><a href="page2.html#article3">Go to Article 3</a></p>
    <p><a href="page2.html#article4">Go to Article 4</a></p>
    
    <script>
        document.querySelector(`#${window.location.href.split('#')[1]}`).classList.remove('hidden');
    </script>

    page2.html

    <style>.hidden { display: none; } </style>
    
    <div id="article3" class="hidden"><h2>Article 3</h2></div>
    <div id="article4" class="hidden"><h2>Article 4</h2></div>
    
    <p><a href="page1.html#article4">Go to Article 1</a></p>
    <p><a href="page1.html#article5">Go to Article 2</a></p>
    
    <script>
        document.querySelector(`#${window.location.href.split('#')[1]}`).classList.remove('hidden');
    </script>

    【讨论】:

    • 多个问题。您缺少click EventListeneronclick trigger。此外,您只需永远显示该元素。如果单击另一个链接,您还需要隐藏它们。然后,您的样本无法正常工作。除此之外,用 JS 解决这个问题的方法很混乱,而且没有必要。您可以使用 anchor + :target 作为纯 CSS 解决方案。更简单/更短,无需编写脚本,更简洁。
    • 不需要点击。如果你真的看我写的,你会发现每个链接只指向另一个页面。然后 JS 在加载时从 URL 中提取锚点。也没有必要隐藏其他内容,因为原始海报没有询问在同一页面上显示内容。您一定误解了问题的意图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多