在多个页面使用同一个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 validator 插件增加日期比较方法
Feb 21 Javascript
JS中如何设置readOnly的值
Dec 25 Javascript
jquery实现的鼠标拖动排序Li或Table
May 04 Javascript
jquery easyui使用心得
Jul 07 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
Jul 28 Javascript
JavaScript中数组Array.sort()排序方法详解
Mar 01 Javascript
详解Angular5 路由传参的3种方法
Apr 28 Javascript
微信小程序wepy框架笔记小结
Aug 08 Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
Mar 15 Javascript
vue之a-table中实现清空选中的数据
Nov 07 Javascript
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
如何确保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 异常处理实现代码
2009/03/10 PHP
用JS实现的一个include函数
2007/07/21 Javascript
document.compatMode介绍
2009/05/21 Javascript
javascript 写类方式之五
2009/07/05 Javascript
ie focus bug 解决方法
2009/09/03 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
YII2 全局异常处理深入讲解
2021/03/24 PHP
委托证明范本
2014/11/25 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
优秀班集体申报材料
2014/12/25 职场文书
感恩教师主题班会
2015/08/12 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL