在多个页面使用同一个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 相关文章推荐
为Yahoo! UI Extensions Grid增加内置的可编辑器
Mar 10 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
Jan 08 Javascript
jQuery div层的放大与缩小简单实现代码
Mar 28 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
JS控制输入框内字符串长度
May 21 Javascript
js实现TAB切换对应不同颜色的代码
Aug 31 Javascript
jQuery Mobile页面返回不需要重新get
Apr 26 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
Jun 13 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
JavaScript之class继承_动力节点Java学院整理
Jul 03 Javascript
ios中视频的最后一桢问题解决
May 14 Javascript
关于layui toolbar和template的结合使用方法
Sep 19 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
php项目打包方法
2008/02/18 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
详解Python中DOM方法的动态性
2015/04/11 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
python实现雨滴下落到地面效果
2018/06/21 Python
基于python指定包的安装路径方法
2018/10/27 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
资料员岗位职责
2013/11/17 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
致100米运动员广播稿
2014/02/14 职场文书
语文教学随笔感言
2014/02/18 职场文书
2014年电教工作总结
2014/12/19 职场文书
学生通报表扬范文
2015/05/04 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
初中班长竞选稿
2015/11/20 职场文书
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android