`
kenny13
  • 浏览: 44054 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

穷夯JavaScript基础——分离JavaScript代码与HTML页面

    博客分类:
  • JSP
阅读更多
现在的HTML页面的编写主要分为三部分:
1.(X)HTML作为结构,由资料方编写。
2.CSS作为样式,由美工方编写。
3.JavaScript作为动态处理,由程序方编写。
分离JavaScript代码与HTML页面是一件很重要的事情,尤其是对于大型网站。设计方和代码方通常是两个人或者两个小组分工合作的。作为一个网页设计者,懂JavaScript不应该是条件之一。所以,如果直接在HTML页面中写入JavaScript的话,势必会造成两方效率均下降。
从另一方面来说,结构与样式现在已经成功的分离开。只要网页设计者在块中加入一行<link href="style.css" type="text/css" rel="stylesheet" />之类的标签,然后就不必再理会样式的问题,样式的问题在css样式表中就全都定义了,只需要通过class属性或者独有的id属性为元素进行意义的标识,不需要任何的样式表知识。而JavaScript就没有这么方便。现在的分离方式通常都是在块中加入一行<script src="script.js" type="text/javascript"></script>然后在script.js文件中定义好预定义变量以及全局函数,然后再HTML页中还要添加事件驱动比如<body onload="'init()'">或者<a href="'javascript:alert('click">click me!</a>等等。但是一个网页设计者并不一定能理解onload的含义。如果记性差点,每隔俩小时敲你办公室门问你onload是干什么用的能把你烦死。所以说,这种简单的分离方法分离得不够彻底。分离JavaScript代码应该像分离CSS样式一样,用户只要对元素的意义进行简单的标识就可以自动做好JavaScript的事件驱动。具体的实现方法可以通过DOM来实现。
举一个简单的例子:鼠标指向小图看大图。
smallpic.js
function initSmallPicture()
{  
    function arraySearch(ary,ele)
    {
        for(var i=0;i<ary.length;i++)
        {
            if(ary[i]==ele)
            {
                return true;
            }
        }
        return false;
    }


    if(!document.getElementsByTagName) return false;
    //遍历所有的<IMG>元素。
    var imgs=document.getElementsByTagName("IMG");
    for(var i=0;i<imgs.length;i++)
    {
        //确认该元素的所有class属性值中含有"makeitsmaller"。
        //注意,IE和FF对class属性的获取有差别。
        var imgClass;
        if(imgs[i].className)
            imgClass=imgs[i].className.split(' ');
        else
            imgclass=imgs[i].getAttribute('class').split(' ');
          
        if(!arraySearch(imgClass,"makeitsmaller")) continue;
      
        //更换图片为缩微版本。
        var imgurl=imgs[i].getAttribute("src");
        var imgurlseprate=imgurl.split('.');
        if(imgurlseprate.length<=1)return false;
        imgurlseprate[imgurlseprate.length-2]+="_s";
        var imgnewurl=imgurlseprate.join('.');
        imgs[i].setAttribute("src",imgnewurl);
      
        //存储图片两个版本的路径。
        imgs[i].setAttribute("bigsrc",imgurl);
        imgs[i].setAttribute("smallsrc",imgnewurl);
      
        //为图片写入事件处理程序。
        var overfunc=function()
        {
            this.setAttribute("src",this.getAttribute("bigsrc"));
            return true;
        }
        var outfunc=function()
        {
            this.setAttribute("src",this.getAttribute("smallsrc"));
            return true;
        }
      
        if(typeof(imgs[i].onmouseover)=="function")
        {
            var oldfunc=imgs[i].onmouseover;
            imgs[i].onmouseover=function()
            {
                oldfunc();
                overfunc();
            }
        }
        else
        {
            imgs[i].onmouseover=overfunc;
        }
        if(typeof(imgs[i].onmouseout)=="function")
        {
            var oldfunc=imgs[i].onmouseout;
            imgs[i].onmouseout=function()
            {
                oldfunc();
                outfunc();
            }
        }
        else
        {
            imgs[i].onmouseout=outfunc;
        }
    }
}

//在网页读取完毕后初始化。
if(typeof(window.onload)=="function")
{
    var oldfunc=window.onload;
    window.onload=function()
    {
        oldfunc();
        initSmallPicture();
    }
}
else
{
    window.onload=initSmallPicture;
}
//以上代码不知道应该怎样写成函数,貌似window.onload这类Handle是传值不是传址。
index.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript" src="smallpic.js"></script>
    </head>
    <body>
        <img src="6.jpg" class="makeitsmaller" />
    </body>
</html>
这样一来,在HTML业中不需要任何Script代码,不需要改变成缩略图路径,只要在需要做缩略图的图片的class属性中增加一条"makeitsmaller"就可以做到缩略图效果了。
但是这个办法并不是最完美的,比如使用Javascript改变img元素的class属性就不会有效果,除非重新运行一次 initSmallPicture而且只能添加不能去除。而且使用CSS的:hover行为定义比这个简单的多。只不过是用这个作为例子说明分离 JavaScript的方法。
使用JavaScript完全分离还可以做到另外一种效果——定义新属性。
一般来说,网页设计人员中懂(X)HTML的人比懂JavaScript的人要多得多。所以说,如果把JavaScript行为转为HTML行为,势必会受到网页设计人员的欢迎。下面举一个例子,表格<td>元素两种背景颜色交替显示。可以在<table>中定义 ColorTable属性,包含3个部分:行交替还是列交替、颜色1、颜色2,用逗号隔开。具体代码如下。
clrtable.js
// clrtable.js
function colorTable()
{
    if(!document.getElementsByTagName) return false;
    var tables=document.getElementsByTagName("TABLE");
    for(var tb=0;tb<tables.length;tb++)
    {
        if(!tables[tb].getAttribute("ColorTable"))continue;
        var tableMessage=tables[tb].getAttribute("ColorTable");
        var tableAttributes=tables[tb].getAttribute("ColorTable").split(",");
        if(tableAttributes.length!=3)continue;
        if(tableAttributes[0]!='row'&&tableAttributes[0]!='col')continue;
        var iscol=(tableAttributes[0]=='col');
        var rows=tables[tb].getElementsByTagName("TR");
        for(var tr=0;tr<rows.length;tr++)
        {
            if(iscol)
                rows[tr].style.backgroundColor=tableAttributes[1+tr%2];
            else
            {
                cells=rows[tr].getElementsByTagName("TD");
                for(var td=0;td<cells.length;td++)
                    cells[td].style.backgroundColor=tableAttributes[1+td%2];
            }
        }
    }
    return true;
}

if(typeof(window.onload)=="function")
{
    oldfunc=window.onload;
    window.onload=function()
    {
        oldfunc();
        colorTable();
    }
}
else
{
    window.onload=colorTable;
}
test.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>clrTable.js test</title>
<script type="text/javascript" src="clrtable.js"></script>
</head>
<body>
<table ColorTable="col,white,grey">
<tr><td>0,0</td><td>1,0</td><td>2,0</td><td>3,0</td></tr>
<tr><td>0,1</td><td>1,1</td><td>2,1</td><td>3,1</td></tr>
<tr><td>0,2</td><td>1,2</td><td>2,2</td><td>3,2</td></tr>
<tr><td>0,3</td><td>1,3</td><td>2,3</td><td>3,3</td></tr>
</table>
</body>
</html>
从以上代码可以看出增加的属性和标准HTML属性看起来并无任何区别。同时,对于网页设计人员来说有一个这样的HTML属性会在网页设计中带来很多便利。
以上代码在IE6\FF2\Opera9中测试通过。
分享到:
评论

相关推荐

    JavaScript模式中文[pdf] 百度云

     传统与现代继承模式的比较  使用类式继承时的预期结果  类式继承模式#1——默认模式  类式继承模式#2——借用构造函数  类式继承模式#3——借用和设置原型  类式继承模式#4——共享原型  类式继承模式#5——...

    JavaScript王者归来part.1 总数2

     6.1.1.2 JavaScript函数的奥妙——魔法代码   6.1.2 函数的调用   6.2 函数的参数   6.2.1 形参与实参   6.2.2 Arguments对象   6.2.2.1 一个使用Arguments对象检测形参的例子   6.2.2.2 一个使用...

    PHPlw格式化系统——前台的设计与实现(源代码+lw).zip

    我们使用了MVC(Model-View-Controller)架构来分离业务逻辑和界面展示,以提高代码的可复用性和可测试性。我们还使用了依赖注入和面向接口编程等技术,以降低代码的耦合度和提高代码的可扩展性。 总之,我们的通用...

    编写高质量代码-Web前端开发修炼之道.azw3

    1.2 Web标准——结构、样式和行为的分离 1.3 前端的现状 1.4 打造高品质的前端代码,提高代码的可维护性——精简、重用、有序 第2章 团队合作 2.1 揭秘前端开发工程师 2.2 欲精一行,必先通十行 2.3 增加代码...

    littlejs::grinning_face:自己写的一个Javascript基础库——littlejs,Little and basic

    littlejs -- Little and basic【重构开发中】本项目是基于环境重构littlejs, 工具式JavaScript库,类似于loadsh。功能功能库: 运动框架; 用ajax实现前后端分离; 设置、获取或者删除cookie; 支持异步方法之一...

    Javascript脚本库:jQuery类库

    jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team,...jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。

    JavaScript模式 斯托扬·斯特凡洛夫 著

    传统与现代继承模式的比较 使用类式继承时的预期结果 类式继承模式#1——默认模式 类式继承模式#2——借用构造函数 类式继承模式#3——借用和设置原型 类式继承模式#4——共享原型 类式继承模式#5——临时构造函数 ...

    单页面和多页面开发及应用

    # 单页面和多页面开发及应用 # 单页面: - 什么是单页面:单页面是指只有一个主页面的应用,... -开发成本:单页面较高,需要专业的框架,多页面较低,但页面重复代码较多 -维护成本:单页面相对容易,双页面相对复杂

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part1.rar

     1.2.1 把行为从结构中分离出来   1.2.2 不要版本检测   1.2.3 通过平稳退化保证可访问性   1.2.4 为重用命名空间而进行规划   1.2.5 通过可重用的对象把事情简化   1.2.6 一定要自己动手写代码  ...

    PHP论文格式化系统——前台的设计与实现毕业设计毕业论文

    这篇论文还介绍了Smart template系统和它扮演的角色,还用一个例子来描述了怎么使用它来将php脚本和html代码分离。论文中还解释了在系统开发期间遇到的一些问题,比如修改mysql数据库密码的问题和其他的问题。

    JS学习资料

     6.3 解决“分离JavaScript”问题  6.4 JavaScript函数的优化:不要做太多的假设  6.5 DOM Core和HTML-DOM  6.6 小结 第7章 动态创建HTML内容  7.1 [removed]()方法  7.2 innerHTML属性  7.3 ...

    学前端,css与javascript重难点浅析

    CSS是将样式信息与网页内容分离的一种标记语言,我们使用css为每个元素定义样式;它主要用于美化HTML页面。 语法为:selector {property:value} (选择符 {属性:值})。 通过设置对应的样式属性可以修改html

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part3.rar

     1.2.1 把行为从结构中分离出来   1.2.2 不要版本检测   1.2.3 通过平稳退化保证可访问性   1.2.4 为重用命名空间而进行规划   1.2.5 通过可重用的对象把事情简化   1.2.6 一定要自己动手写代码  ...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part2.rar

     1.2.1 把行为从结构中分离出来   1.2.2 不要版本检测   1.2.3 通过平稳退化保证可访问性   1.2.4 为重用命名空间而进行规划   1.2.5 通过可重用的对象把事情简化   1.2.6 一定要自己动手写代码  ...

    Jquery源码(包含Jq用到的所有函数体)

    jQuery本质上就是用javascript代码写成的各种方法的集合。但是javascript本身不是已经提供了各种各样的方法和功能了吗?为什么还要再另外写一个库出来呢?原因其实很好猜,那肯定是我们要写的这个库比javascript提供...

    formvalidator4.1

    一般要判断的表单元素比较多,开发过程就显得枯燥无味——重复的代码不断重复,而且可能还要兼容多种浏览器,更多的考虑因素使人头疼不已。由于每个要校验的页面虽然逻辑基本相同,但是在大多数情况下,出于种种原因...

    SpringBoot + SpringCloud 构建分布式、负载均衡系统,前后分离企业级快速开发脚手架——前端

    SpringBoot + SpringCloud 构建分布式、负载均衡系统,前后分离企业级快速开发脚手架 这是我平时测试用的项目,整天想着开源一直忙没有时间整理,现在整理出来,有兴趣的朋友可以用于研究学习也可以在此基础上快速...

    代码之美(中文完整版).pdf

    17.5. 复用与分离 17.6.分层是永恒之道? 第18章 Python的字典类:如何打造全能战士 18.1. 字典类的内部实现 18.2. 特殊调校 18.3. 冲突处理 18.4. 调整大小 18.5. 迭代和动态变化 18.6. 结论 18.7. 致谢 第19章 ...

    jquery资源包 Jquery是继prototype之后又一个优秀的Javascrīpt框架

    jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team,...jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。

    jQuery权威指南-源代码

    醉心于对JavaScript、jQuery和Ajax等Web开发技术的研究与实践,并长期专注于HTML页面的优化与用户体验的研究,在页面框架搭建、数据流向分析、页面静态优化方面拥有丰富的实践经验。此外,他还是微软技术方面的专家...

Global site tag (gtag.js) - Google Analytics