あなたが探しているテクニックは、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>
上記のページは2つのセクションに分かれており、1つはid = "page1"で、もう1つはid="page2"です。デフォルトでは、ページ2を非表示にします。
ユーザーが製品のリンクをクリックすると、ページ1が非表示になり、ページ2が表示されます。
document.getElementById("page1").setAttribute("style","display:none");
document.getElementById("page2").setAttribute("style","display:block");
さらに、クリックされたリンクに応じて、クリックされた製品の製品の詳細を再表示し、クリックされなかった製品の詳細を非表示にします。たとえば、商品1をクリックすると、商品1が表示されます。
document.getElementById("prod2").setAttribute("style","display:none");
document.getElementById("prod1").setAttribute("style","display:block");
最終的には、page2divのみが表示されます。ユーザーが[商品カテゴリに戻る]リンクをクリックすると、プロセスが逆になり、page2が非表示になり、page1が表示されます。
要約すると、このタイプの操作は、@ Marcelが指摘しているように、PHPやサーバー側のコードを使用せずに、HTML、JavaScript、CSSを使用するだけで、クライアント側で完全に実行できます。ただし、純粋な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>
上記の例では、ユーザーが製品のリンクをクリックすると、サーバーはページのdiv#container部分を十分に置き換えるのに十分なHTMLで応答します。
<span id="product">
<p>Product Name 1</p>
<p>Product details...</p>
</span>
これはページに挿入されるため、DOMは次のようになります。
<body>
<div id="container">
<span id="product">
<p>Product Name 1</p>
<p>Product details...</p>
</span>
</div>
</body>
概要:
この質問にはjQueryではなくJavaScriptのタグが付けられているため、回答はJavaScriptに焦点を当てていますが、DHTMLセクションで説明されている手法は多くのJavaScriptライブラリで利用されています。たとえば、説明する手法のデモについては、jQueryMobileのマルチページテンプレートを参照してください。