Javascript动态更改另一个页面,这就是我所做的';我在尽力做可能的事?
我想知道当用户单击第一个页面的链接时,是否可以更改另一个尚未打开的页面。这很难解释,但我会尝试用下面的一个例子来说明我的意思 对于实际站点而言,html更为复杂,但这里有一个淡化版本: 索引:Javascript动态更改另一个页面,这就是我所做的';我在尽力做可能的事?,javascript,html,dom,xhtml,Javascript,Html,Dom,Xhtml,我想知道当用户单击第一个页面的链接时,是否可以更改另一个尚未打开的页面。这很难解释,但我会尝试用下面的一个例子来说明我的意思 对于实际站点而言,html更为复杂,但这里有一个淡化版本: 索引: <head> <script type="text/javascript" src="external.js"></script> </head> <body> <div id="container"> <div cl
<head>
<script type="text/javascript" src="external.js"></script>
</head>
<body>
<div id="container">
<div class="img">
<a href="PRODUCTPAGE.html">
<img src="product.jpg"/> </a>
</div>
<div class="img">
<a href="PRODUCTPAGE.html">
<img src="product2.jpg"/></a>
</div>
</body>
<head>
<script type="text/javascript" src="external.js"></script>
</head>
<body>
<div id="container">
<div id = "product1">
all of product 1 info and pictures
</div>
<div id = "product2">
all of product 2 info and pictures
</div>
产品页面:
<head>
<script type="text/javascript" src="external.js"></script>
</head>
<body>
<div id="container">
<div class="img">
<a href="PRODUCTPAGE.html">
<img src="product.jpg"/> </a>
</div>
<div class="img">
<a href="PRODUCTPAGE.html">
<img src="product2.jpg"/></a>
</div>
</body>
<head>
<script type="text/javascript" src="external.js"></script>
</head>
<body>
<div id="container">
<div id = "product1">
all of product 1 info and pictures
</div>
<div id = "product2">
all of product 2 info and pictures
</div>
所有产品1信息和图片
所有产品2信息和图片
所以基本上,当点击product1图像时,只在产品页面上显示product1信息,而点击product2时,只在页面上显示product2的信息,是否可以只使用javascript,而不使用php或任何东西。我一直在努力寻找类似的东西,但到目前为止还没有,这让我相信我可能做不到,但我想我会问
我的javascript文档中没有太多内容,因为我还没有弄明白,但我一直在尝试让它们的display=none。如果你知道我的意思的话,我还不能得到一个变量来继续下一页。对不起,我对Javascript只有基本的了解。您可以更改链接以添加参数。这样PRODUCTPAGE.html就会知道您单击了哪个链接
<a href="PRODUCTPAGE.html?product1"><img src="product1.jpg"/></a>
<a href="PRODUCTPAGE.html?product2"><img src="product2.jpg"/></a>
在PRODUCTPAGE.html中,您可以使用JavaScript解析URL并仅显示特定产品的数据。是的,您可以通过JavaScript隐藏和显示DOM的不同部分
看看你需要做什么 您正在寻找的技术是DHTML(动态HTML)和AJAX(异步JavaScript和XML)的结合 DHTML: DHTML背后的思想是,当用户从服务器请求HTML页面时,服务器会响应该页面,以及用户执行某些操作(如单击产品图像)时可能需要的其他数据 默认情况下,服务器在初始页面加载时返回HTML页面的数据通常是隐藏的。例如,页面的DOM已加载,但元素上可能有style=“display:none” 一旦用户启动了某个操作,页面就会使用JavaScript操作页面上可见的元素以及可能隐藏的元素 考虑下一页:
<body>
<div id="page1">
<div id="container">
<div class="img">
<a id="product1" onclick="showProduct1();" href="#">
<img src="product.jpg"/> </a>
</div>
<div class="img">
<a id="product2" onclick="showProduct2();" href="#">
<img src="product.jpg"/> </a>
</div>
</div>
</div>
<div id="page2" style="display:none">
<div id="product_page_wrapper">
<a href="#" onclick="backToCategories()">back to Product Categories</a>
<div id="productDetails">
<div id="prod1">
...
...
</div>
<div id="prod2">
...
...
</div>
</div
</div>
</div>
</body>
此外,根据单击的链接,我们还取消隐藏已单击产品的产品详细信息,并隐藏未单击产品的详细信息。例如,如果单击产品1,我们将显示产品1:
document.getElementById("prod2").setAttribute("style","display:none");
document.getElementById("prod1").setAttribute("style","display:block");
最终结果是只显示page2 div。如果用户单击“返回到产品类别”链接,我们将反转过程,隐藏第2页并显示第1页
总之,这种类型的操作可以完全在客户端完成,无需任何PHP或服务器端代码,只需使用@Marcel指出的方法。然而,使用纯DHTML更多的是一种学术练习,而不是一种实际的解决方案,因为服务器端维护客户数据、产品数据,以及专业的创收产品所需的一切
AJAX:
另一方面,AJAX与DHTML非常相似,甚至可以被认为是DHTML的扩展。AJAX背后的思想是——当用户启动一个操作时——页面从服务器请求数据。当服务器响应时,数据被传递给回调函数,然后回调函数使用数据操纵页面
在您的特定示例中,您可以同时使用DHTML和AJAX来实现所需的效果。考虑下面的页面,它使用Ajax来为用户选择的产品拉上相关的HTML:
<head>
<script type="text/javascript" src="external.js"></script>
<script>
function makeRequest(url) {
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!httpRequest) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreadystatechange = displayContents;
httpRequest.open('GET', url);
httpRequest.send();
}
function displayContents() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
//alert(httpRequest.responseText);
document.getElementById("container").innerHTML = httpRequest.responseText;
} else {
alert('There was a problem with the request.');
}
}
</script>
</head>
<body>
<div id="container">
<div class="img">
<a id="product1" onclick="makeRequest('/getproduct?id=1')" href="#">
<img src="product.jpg"/> </a>
</div>
<div class="img">
<a id="product2" href="#" onclick="makeRequest('/getproduct?id=2')">
<img src="product2.jpg"/></a>
</div>
</div>
</body>
函数makeRequest(url){
如果(window.XMLHttpRequest){//Mozilla,Safari。。。
httpRequest=新的XMLHttpRequest();
}如果(window.ActiveXObject){//IE
试一试{
httpRequest=新的ActiveXObject(“Msxml2.XMLHTTP”);
}
捕获(e){
试一试{
httpRequest=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
捕获(e){}
}
}
如果(!httpRequest){
警报(“放弃:(无法创建XMLHTTP实例”);
返回false;
}
httpRequest.onreadystatechange=显示内容;
httpRequest.open('GET',url);
httpRequest.send();
}
函数displayContents(){
if(httpRequest.readyState==4){
if(httpRequest.status==200){
//警报(httpRequest.responseText);
document.getElementById(“容器”).innerHTML=httpRequest.responseText;
}否则{
警报(“请求有问题”);
}
}
在上面的示例中,当用户单击某个产品的链接时,服务器会以刚好足够的HTML响应,以充分替换页面的div#container部分:
<span id="product">
<p>Product Name 1</p>
<p>Product details...</p>
</span>
产品名称1
产品详细信息
这被注入到页面中,因此DOM将如下所示:
<body>
<div id="container">
<span id="product">
<p>Product Name 1</p>
<p>Product details...</p>
</span>
</div>
</body>
产品名称1
产品详细信息
摘要:
这个问题被标记为JavaScript,而不是jQuery,因此答案集中在JavaScript上,但许多JavaScript库都使用了DHTML部分中描述的技术。例如,请参阅您描述的技术演示。DHTML(基本上是HTML、CSS和JS的组合)这不是你在第二段中描述的。我从来都不喜欢这个词,但我猜。对不起,马塞尔,我还在写第二部分。我将对这两部分重新排序,使DHTML排在第一位。感谢链接!:)哇,DHTML和
新的ActiveXObject(“Microsoft.XMLHTTP”)
.T