在多个页面使用同一个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 获取标签名(tagName)示例代码
Jul 11 Javascript
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
js实现遮罩层划出效果是生成div而不是显示
Jul 29 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
谈谈JavaScript中function多重理解
Aug 28 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
javascript实现随机显示星星特效
Jan 28 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
Jul 04 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
Mar 08 Javascript
Vue.js中数据绑定的语法教程
Jun 02 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
Nov 21 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实现CSV文件导入和导出
2015/10/24 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
JS画线(实例代码)
2013/11/20 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
2017/09/18 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
TensorFlow实现Logistic回归
2018/09/07 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
python 实现方阵的对角线遍历示例
2019/11/29 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
区域销售经理岗位职责
2013/12/10 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
人资专员岗位职责
2014/04/04 职场文书
高中课程设置方案
2014/05/28 职场文书
教师考察材料范文
2014/06/03 职场文书
购房意向书
2014/08/30 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
Python first-order-model实现让照片动起来
2022/06/25 Python