gpt4 book ai didi

javascript - 如何根据 URL 更改 HTML 内容?

转载 作者:行者123 更新时间:2023-11-29 17:39:18 25 4
gpt4 key购买 nike

我有一个 HTML 页面,其中有两个 IFrame,并且有两个按钮控制它们中的哪一个可见。

这是index.html:

<!DOCTYPE html>
<html>
<head>
<title>MyPage</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>

<body onload="init()">
<div class="main">
<div class="leftbar">
<button id="btn_1" class="leftbar-button" onclick="openTab(event, 'sec1')">Section1</button>
<button id="btn_2" class="leftbar-button" onclick="openTab(event, 'sec2')">Section2</button>
</div>

<div id="sec1" class="tabcontent">
<iframe src="section1.html"></iframe>
</div>

<div id="sec2" class="tabcontent">
<iframe src="section2.html"></iframe>
</div>
</div>

<div id="clear" class="clear" style="clear: both; height: 0;"></div>

<script src="main.js"></script>
</body>
</html>

这是main.js:

function onSwInit()
{
// Set the home page to be displayed
document.getElementById("sec1").style.display = "block";
document.getElementById("btn_1").className += " active";
}

function openTab(evt, tabName)
{
// Hide all content
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++)
{
tabcontent[i].style.display = "none";
}

// Display the clicked section
tablinks = document.getElementsByClassName("leftbar-button");
for (i = 0; i < tablinks.length; i++)
{
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(tabName).style.display = "block";
evt.currentTarget.className += " active";
}

现在,正如您所见,默认情况下,页面以 btn_1 开始,相应的 IFrame section1.html 可见。现在的问题是,假设我想共享页面的 URL,并且 IFrame section2.html 可见,我该怎么做?

我可以使用 HTML、Javascript 或 PHP 解决方案。

最佳答案

JavaScript:

  1. 避免使用内联 on* 处理程序(onclick、oninput 等)并在 JavaScript 本身中使用事件监听器。删除 onclick 处理程序并使用 querySelectorAll 检索所有按钮并将它们分配给变量,比如 btns

  2. 使用 forEach()btns 变量中的每个按钮添加一个 click 事件监听器,它将加载一个名为比如,toggleFrames()

  3. 在该函数内,再次使用 querySelectorAll 检索类名为 tabcontent 的所有元素,并将它们分配给一个变量,比如 frames.

  4. 使用 subtr() 从您的按钮 ID 中检索 number 例如btn_2 中的 2,您将使用它与变量 frames 中每个选项卡内容的 ID 进行比较。

  5. 在变量 frames 上使用 forEach() 并检查点击按钮的 id 中的数字是否与每个 tabcontent 的 id 中的数字相匹配,例如sec2 中的 2 如果有,添加 active 类名并更改它的 css display 属性block 的元素。

  6. 使用window.location.href 检索当前页面的url,然后使用search()检查 url 字符串是否包含您的 iframe 之一的 id 的方法。如果匹配,则显示该 iframe 并隐藏另一个 iframe。


检查并运行下面的代码片段以获得上述的实际示例:

//Check URL

function checkUrl() {
var url = window.location.href;
var frames = document.querySelectorAll('.tabcontent');
frames.forEach(frame => {
if( url.search( frame.id ) > 0 ) {
frame.style.display = "block";
frame.classList.add("active");
} else {
frame.style.display = "none";
frame.classList.remove("active");
}
})
}

window.onload = checkUrl();

//Check Button Click

var btns = document.querySelectorAll(".leftbar-button");

function toggleFrame(e){
var frames = document.querySelectorAll('.tabcontent');
var x = e.target.id.substr(-1);
frames.forEach(frame => {
if(frame.id.includes(x)){
frame.style.display = "block";
frame.classList.add("active");
} else {
frame.style.display = "none";
frame.classList.remove("active");
}
});

}

btns.forEach(btn => {
btn.addEventListener("click", toggleFrame);
})
.tabcontent {padding:20px 10px;text-align:center;background-color: #000;color:#FFF;}
 <div class="main">
<div class="leftbar">
<button id="btn_1" class="leftbar-button">Section1</button>
<button id="btn_2" class="leftbar-button">Section2</button>
</div>
<hr />
<div id="sec1" class="tabcontent">
<h1>
Iframe 1 here
</h1>
</div>

<div id="sec2" class="tabcontent" style="display: none;">
<h1>
Iframe 2 here
</h1>
</div>
</div>

关于javascript - 如何根据 URL 更改 HTML 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54100654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com