在多个页面使用同一个HTML片段的代码


Posted in Javascript onMarch 04, 2011

问题描述
有一个比较复杂的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" 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>

由于我们需要在多个页面引用同一个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" 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>

其实我们可以更进一步,完全没必要手工调用这个函数,而是可以在返回的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" 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的方式是我们所推荐的。
下载源代码
Javascript 相关文章推荐
JQuery EasyUI的使用
Feb 24 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
判断横屏竖屏(三种)
Feb 13 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
JavaScript实现简单生成随机颜色的方法
Sep 21 Javascript
微信小程序定位当前城市的方法
Jul 19 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
Aug 31 Javascript
微信小程序左滑删除功能开发案例详解
Nov 12 Javascript
JavaScript设计模式之装饰者模式实例详解
Jan 17 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
Apr 29 Javascript
微信小程序实现倒计时功能
Nov 19 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 Javascript
如何确保JavaScript的执行顺序 之实战篇
Mar 03 #Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
Mar 03 #Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
Mar 03 #Javascript
jQuery 操作option的实现代码
Mar 03 #Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
Mar 03 #Javascript
jquery中实现简单的tabs插件功能的代码
Mar 02 #Javascript
基于jQuery的简单的列表导航菜单
Mar 02 #Javascript
You might like
世界第一个无线广播电台 KDKA
2021/03/01 无线电
PHP生成便于打印的网页
2006/10/09 PHP
PHP图片上传类带图片显示
2006/11/25 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
axios基本入门用法教程
2017/03/25 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
详解python 注释、变量、类型
2018/08/10 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
Python实现登陆文件验证方法
2018/10/06 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
物理教学随笔感言
2014/02/22 职场文书
简单租房协议书
2014/04/09 职场文书
岗位明星事迹材料
2014/05/18 职场文书
农村党员对照检查材料
2014/09/24 职场文书
教师网络培训心得体会
2016/01/09 职场文书