为了账号安全,请及时绑定邮箱和手机立即绑定

如何在多个页面使用同一个HTML片段

标签:
Html5


文章截图 - 更好的排版
下载源代码

问题描述
有一个比较复杂的HTML片段(A),如果把这个HTML片段嵌入到其他页面中(B,C,D....)。
问题的关键是在HTML片段中有大量的JavaScript逻辑需要处理,比如说分页,点击事件响应等。

对于这个问题,我们用一个简单的例子来说明:
“页面上有一个按钮,点击此按钮引入一个HTML片段,此HTML片段中有分页按钮。”

1. 使用IFrame
主页面,点击一个按钮向页面引入一个IFrame:

    <script type="text/javascript">        $(function() {            $("#clickToInsert").click(function() {                $("#placeholder").html('<iframe class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="iframe.htm"></iframe>');            });        });    </script>    <input type="button" id="clickToInsert" value="Insert HTML" />    <div id="placeholder">    </div>

IFrame页面,模拟分页的情况:

    <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返回页面片段,并注册事件
注:我们通过textarea来模拟返回的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" >    <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>


由于我们需要在多个页面引用同一个HTML片段,这种方法导致大量事情处理被重复性的拷贝粘贴,明显我们需要将公共的方法提取出来。

3. AJAX返回页面片段,并调用页面片段中的函数注册事件

    <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" >    <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>


其实我们可以更进一步,完全没必要手工调用这个函数,而是可以在返回的HTML片段中让其自动执行。

4. AJAX返回页面片段,其事件自动注册

    <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" >    <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的方式是我们所推荐的。



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消