继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

会当凌绝顶聪明
关注TA
已关注
手记 240
粉丝 36
获赞 122


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

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

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

1. 使用IFrame
主页面,点击一个按钮向页面引入一个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页面,模拟分页的情况:

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



打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP