在多个页面使用同一个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 API学Jquery 之二 属性
Apr 09 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
使用jQuery动态加载js脚本文件的方法
Apr 03 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
Mar 26 Javascript
jQuery实现获取绑定自定义事件元素的方法
Dec 02 Javascript
实例讲解js验证表单项是否为空的方法
Jan 09 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
Apr 26 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
Jun 01 Javascript
详解vue-property-decorator使用手册
Jul 29 Javascript
在Vue里如何把网页的数据导出到Excel的方法
Sep 30 Javascript
JavaScript实现贪吃蛇游戏
Jun 16 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
利用 window_onload 实现select默认选择
2006/10/09 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
5 cool javascript apps
2007/03/24 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
webpack配置之后端渲染详解
2017/10/26 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
Python中暂存上传图片的方法
2015/02/18 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
为什么是 Python -m
2020/06/19 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
售后服务承诺书范文
2014/03/26 职场文书
需求分析说明书
2014/05/09 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
单位更名证明
2015/06/18 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript