在多個(gè)頁(yè)面使用同一個(gè)HTML片段的代碼
問題描述
有一個(gè)比較復(fù)雜的HTML片段(A),如果把這個(gè)HTML片段嵌入到其他頁(yè)面中(B,C,D....)。
問題的關(guān)鍵是在HTML片段中有大量的JavaScript邏輯需要處理,比如說(shuō)分頁(yè),點(diǎn)擊事件響應(yīng)等。
對(duì)于這個(gè)問題,我們用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明:
“頁(yè)面上有一個(gè)按鈕,點(diǎn)擊此按鈕引入一個(gè)HTML片段,此HTML片段中有分頁(yè)按鈕?!?
1. 使用IFrame
主頁(yè)面,點(diǎn)擊一個(gè)按鈕向頁(yè)面引入一個(gè)IFrame:
<script type="text/javascript">
$(function() {
$("#clickToInsert").click(function() {
$("#placeholder").html('<iframe src="iframe.htm"></iframe>');
});
});
</script>
<input type="button" id="clickToInsert" value="Insert HTML" />
<div id="placeholder">
</div>
IFrame頁(yè)面,模擬分頁(yè)的情況:
<script type="text/javascript">
$(function() {
var parent = $("#complex_page_segment");
$(".previous", parent).click(function() {
$(".content", parent).html("Previous Page Content");
});
$(".next", parent).click(function() {
$(".content", parent).html("Next Page Content");
});
});
</script>
<div id="complex_page_segment">
<input type="button" value="Previous Page" class="previous" />
<input type="button" value="Next Page" class="next" />
<div class="content">
Page Content</div>
</div>
2. AJAX返回頁(yè)面片段,并注冊(cè)事件
注:我們通過(guò)textarea來(lái)模擬返回的HTML片段。
<script type="text/javascript">
$(function() {
$("#clickToInsert").click(function() {
$("#placeholder").html($("#clone").val());
var parent = $("#complex_page_segment");
$(".previous", parent).click(function() {
$(".content", parent).html("Previous Page Content");
});
$(".next", parent).click(function() {
$(".content", parent).html("Next Page Content");
});
});
});
</script>
<input type="button" id="clickToInsert" value="Insert HTML" />
<div id="placeholder">
</div>
<textarea id="clone" style="display: none;">
<div id="complex_page_segment">
<input type="button" value="Previous Page" class="previous" />
<input type="button" value="Next Page" class="next" />
<div class="content">Page Content</div>
</div>
</textarea>
由于我們需要在多個(gè)頁(yè)面引用同一個(gè)HTML片段,這種方法導(dǎo)致大量事情處理被重復(fù)性的拷貝粘貼,明顯我們需要將公共的方法提取出來(lái)。
3. AJAX返回頁(yè)面片段,并調(diào)用頁(yè)面片段中的函數(shù)注冊(cè)事件
<script type="text/javascript">
$(function() {
$("#clickToInsert").click(function() {
$("#placeholder").html($("#clone").val());
init_complex_page_segment();
});
});
</script>
<input type="button" id="clickToInsert" value="Insert HTML" />
<div id="placeholder">
</div>
<textarea id="clone" style="display: none;">
<script type="text/javascript">
function init_complex_page_segment() {
var parent = $("#complex_page_segment");
$(".previous", parent).click(function() {
$(".content", parent).html("Previous Page Content");
});
$(".next", parent).click(function() {
$(".content", parent).html("Next Page Content");
});
}
</script>
<div id="complex_page_segment">
<input type="button" value="Previous Page" class="previous" />
<input type="button" value="Next Page" class="next" />
<div class="content">Page Content</div>
</div>
</textarea>
其實(shí)我們可以更進(jìn)一步,完全沒必要手工調(diào)用這個(gè)函數(shù),而是可以在返回的HTML片段中讓其自動(dòng)執(zhí)行。
4. AJAX返回頁(yè)面片段,其事件自動(dòng)注冊(cè)
<script type="text/javascript">
$(function() {
$("#clickToInsert").click(function() {
$("#placeholder").html($("#clone").val());
});
});
</script>
<input type="button" id="clickToInsert" value="Insert HTML" />
<div id="placeholder">
</div>
<textarea id="clone" style="display: none;">
<script type="text/javascript">
$(function() {
var parent = $("#complex_page_segment");
$(".previous", parent).click(function() {
$(".content", parent).html("Previous Page Content");
});
$(".next", parent).click(function() {
$(".content", parent).html("Next Page Content");
});
});
</script>
<div id="complex_page_segment">
<input type="button" value="Previous Page" class="previous" />
<input type="button" value="Next Page" class="next" />
<div class="content">Page Content</div>
</div>
</textarea>
最后一種方法和第一種IFrame的方式是我們所推薦的。
下載源代碼
相關(guān)文章
javascript 強(qiáng)制刷新頁(yè)面的實(shí)現(xiàn)代碼
javascript 強(qiáng)制刷新頁(yè)面的代碼,大家經(jīng)常能用的到。2009-12-12客戶端 使用XML DOM加載json數(shù)據(jù)的方法
我們?nèi)〕鰯?shù)據(jù)后可以以json的形式傳到前端處理,也可以以Xml Dom的形式傳到前端進(jìn)行處理。下邊例子是利用Jquery處理XML Dom的例子。2010-09-09js showModalDialog彈出窗口實(shí)例詳解
本篇文章主要是對(duì)js showModalDialog彈出窗口進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01一個(gè)JavaScript防止表單重復(fù)提交的實(shí)例
防止重復(fù)表單提交的方法有很多,本文使用JavaScript來(lái)實(shí)現(xiàn)防止表單重復(fù)提交,很簡(jiǎn)單,但很實(shí)用,新手朋友們不要錯(cuò)過(guò)2014-10-10uniapp中scroll-view基礎(chǔ)用法示例代碼
我們?cè)陧?xiàng)目中往往都能遇到實(shí)現(xiàn)左右滑動(dòng)跟上下滑動(dòng)的需求,下面這篇文章主要給大家介紹了關(guān)于uniapp中scroll-view基礎(chǔ)用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11