在多个页面使用同一个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 (二) 万能的选择器
Oct 01 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
jQuery实现HTML5 placeholder效果实例
Dec 09 Javascript
js实现简单的可切换选项卡效果
Apr 10 Javascript
以Python代码实例展示kNN算法的实际运用
Oct 26 Javascript
jQuery同步提交示例代码
Dec 12 Javascript
EasyUI Combobox设置默认值 获取text的方法
Nov 28 Javascript
微信小程序 自定义对话框实例详解
Jan 20 Javascript
javascript history对象详解
Feb 09 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 29 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
服务器端解压缩zip的脚本
2006/12/22 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
jQuery 操作option的实现代码
2011/03/03 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
js select option对象小结
2013/12/20 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
Django 前后台的数据传递的方法
2017/08/08 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
什么造成了Java里面的异常
2016/04/24 面试题
项目经理聘任书
2014/03/29 职场文书
经费申请报告范文
2015/05/18 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
python opencv通过4坐标剪裁图片
2021/06/05 Python
Java实现多线程聊天室
2021/06/26 Java/Android
Python+tkinter实现高清图片保存
2022/03/13 Python
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android