网站前端_JavaScript-DOM编程.0002.JavaScriptDom编码原则?

编码原则:

1. 不太归罪于Js,一切根源在于编写Js的人对Js的认知

2. 可观的说没有不好的技术,只有没有用好的技术,所以在实现一些功能时,首先要确认,网页增加这种额外的功能是否真的有必要

3. 结构化设计理论推崇一个函数最好只有一个入口点和一个出口点,但现实中我们推荐大家一个函数可以有多个出口点,但是推荐出口点集中在函数的开头部分,最后有一个出口点即可

预留退路:

说明: 当有些浏览器不支持Js或是被禁用,我们应该预留退路,也就是说虽然某些功能无法使用,但是最基本的操作任然能顺利完成

1. 不推荐的做法 - 伪协议法


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>预留退路</title>
</head>
<body>
    <a href="javascript:pop(‘http://xmdevops.blog.51cto.com/‘)">
        ζ自动化运维开发之路ζ
        </a>
</body>
<script type="text/javascript">
function pop(url){
    window.open(url, ‘xmdevops‘,    
                  ‘fullscreen=yes,height=‘ + screen.height + ‘,width=‘ + screen.width + 
            ‘left=0,location=no‘+
            ‘menubar=no,resizeable=no,scrollbars=yes,status=no,toolbar=no,top=0‘
            )
}
</script>
</html>


2. 不推荐的做法 - 事件处理


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>预留退路</title>
</head>
<body>
    <a href="#" onclick="pop(‘http://xmdevops.blog.51cto.com/‘);return false">
        ζ自动化运维开发之路ζ
        </a>
</body>
<script type="text/javascript">
function pop(url){
    window.open(url, ‘xmdevops‘,    
                ‘fullscreen=yes,height=‘ + screen.height + ‘,width=‘ + screen.width + 
                ‘left=0,location=no‘+
                ‘menubar=no,resizeable=no,scrollbars=yes,status=no,toolbar=no,top=0‘
                )
}
</script>
</html>


问题: "javascript:"伪协议让我们可以通过一个链接来调用Js函数,但是一旦浏览器不支持Js或是被禁用Js功能,则此时链接失效,点击什么也不会做,内嵌事件处理,href值为#只是创建一个空链接,实际工作全部由onclick属性完成,但是和伪协议一样糟糕,因为搜索引擎爬取的是带链接的内容,而不认识Js代码

3. 改进后的做法 - 事件处理


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>预留退路</title>
</head>
<body>
    <a href="http://xmdevops.blog.51cto.com/" onclick="pop(this.getAttribute(‘href‘));return false">
        ζ自动化运维开发之路ζ
        </a>
</body>
<script type="text/javascript">
function pop(url){
    window.open(url, ‘xmdevops‘,    
                ‘fullscreen=yes,height=‘ + screen.height + ‘,width=‘ + screen.width + 
                ‘left=0,location=no‘+
                ‘menubar=no,resizeable=no,scrollbars=yes,status=no,toolbar=no,top=0‘
                )
}
</script>
</html>


说明: 如上方式即时浏览器不支持Js或禁用Js链接依然生效,对搜索引擎也更加友好,但是这样的写法和我们内联CSS的写法似乎更相似,我们更推荐的是大家使用事件绑定的方式来实现Js分离

4. 改进后的做法 - 事件绑定


<html>
    <head>
        <title></title>
        <meta charset="utf-8"/>
        <link rel="stylesheet" href="css/layout.css" />
    </head>
    <body>
        <h1>SnamShots</h1>
    <ul>
        <li>
            <a href="images/fireworks.jpg" title="a fireworks display">fireworks</a>
        </li>
        <li>
            <a href="images/coffee.jpg" title="a coffee display">coffee</a>
        </li>
        <li>
            <a href="images/rose.jpg" title="a rose display">rose</a>
        </li>
        <li>
            <a href="images/bigben.jpg" title="a bigben display">bigben</a>
        </li>
    </ul>
    <img id="placeholder" src="images/placeholder.gif" alt="my image gallery" />
    <p id="description">Choose a image.</p>
    <script type="text/javascript" src="js/main.js"></script>
    </body>
</html>

window.load = prepareLinks
function prepareLinks(){
    // 判断浏览器兼容度来决定是否要执行此函数
    if(document.getElementsByTagName) return false
    var links = document.getElementsByTagName(‘a‘)
    var placeholder = document.getElementById(‘placeholder‘)
    var description = document.getElementById(‘description‘)
    for(var i=0; i<links.length; i++){
        links[i].onclick = function(){
            var href = this.getAttribute(‘href‘)
            var title = this.getAttribute(‘title‘)
            placeholder.setAttribute(‘src‘, href)
            description.firstChild.nodeValue = title
            return false
        }
    }
}


循序渐进:



说明: 其实是一种思考问题的方法,从最核心的内容开始,逐步添加额外功能,先用标记语言给核心内容添加正确标记使得获得正确结构,然后在逐步充实被加上的正确标记内容,充实的内容既可以通过CSS样式表实现各种呈现效果也可以通过DOM操作添加各种操作行为

收回控制:



说明: 默认事件譬如鼠标悬停在被设置title属性的元素上时,不同的浏览器可能显示效果不一,我们完全可以通过DOM把隐藏的属性检索出来依据信息创建内容然后插入到文档,来掌握控制权

时间: 2024-12-06 15:59:49

网站前端_JavaScript-DOM编程.0002.JavaScriptDom编码原则?的相关文章

网站前端_JavaScript.0002.JavaScript快速使用

<script></script> 说明: 用于在html页面中插入js的主要方法 属性名称 属性说明 src 表示包含要执行代码的外部文件,常用来引用外部的js文件 type 表示代码使用的脚本语言的内容类型 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JavaScript快速使用</title> </hea

网站前端_JavaScript.0001.JavaScript简单概述

简单说明: 1. JavaScript问世之前表单数据验证都是通过服务端验证,又由于拨号上网年代服务器验证非常慢,JavaScript的横空出世完美解决了此问题,完美支持客户端表单验证 2. 经过多年发展,JavaScript从一个简单的输入验证成为一门强大的面向对象,解释型,事件驱动的程序设计语言,目前主要用来验证发往服务器的数据,增加Web互动,加强用户体验度等 历史回顾: 1. 1995年网景和SUN开发出JavaScript脚本语言,微软眼红随即开发出一个JavaScript的克隆版,叫

网站前端_Bootstrap.基础入门.0002.排版/列表/表格/表单/按钮/图像?

通用技能: # 文档类型 <!DOCTYPE html> <html lang="zh-cn">     <!-- Html Code --> </html> 说明: 由于BootStrap基于HTML5,所以所有的HTML文件都需要在其顶部引用HTML5的DOCTYPE属性. # 移动先行 <meta name="viewport" content="width=device-width, initi

网站前端_JavaScript.0012.JavaScript深入对象

基本类型: 说明: 基本类型变量主要在栈内存中保存变量名+变量值,变量赋值时解析器如果认定此值为基本类型,则分配固定大小的空间,基本类型包括Undefined, Null, Boolean, Number, String的字面值对象,称为基本类型对象 var name = '李满满' // 在栈内存中复制一份"李满满"给newName var newName = name newName = '刘珍珍' // 由于赋值的副本和原来的数据没半毛钱关系,所以任何一个基本类型的变量都不会改变

网站前端_JavaScript.0008.JavaScript对象数组

对象简介: 说明: 类/类型是一种数据结构,用于将数据和功能组织在一起,虽然Js是一种面向对象的语言,却不具备传统面向对象那样可以自定义类结构 对象相关: 说明: Object实例虽然不具备多少功能但对于应用程序中的存储和传输数据而言,确实是非常理想的选择 // 创建对象 //          - 第一种方式 var newObj = new Object() //          - 第二种方式 var newObj = new Object //          - 第三种方式 var

网站前端_EasyUI.基础入门.0002.使用EasyUI Panel组件的最佳姿势?

1. 基础面板 <div id="p" class="easyui-panel" style="padding: 10px;" data-options="width:700,height:250,title:'基础面板'">     <p>jQuery EasyUI framework helps you build your web pages easily.</p>     <u

网站前端_JavaScript.0011.JavaScriptFunction

函数类型: 说明: Function类型实际上是对象,每个函数都是Function类型的实例,而且都与其它引用类型一样具有属性和方法,由于函数是对象,因此函数名实际上也是一个指向函数对象的指针 //函数声明 //        - 普的函数声明 var max = function(x, y){     return x>y?1:(x==y?0:-1) } console.log(max(1, 2))           - 使用Function构造函数 var func= new Functi

网站前端_JavaScript.0013.JavaScript包装类型

简单介绍: 说明: Js提供了三个特殊的引用类型:Boolean, Number, String,当作为基本类型对象赋值给变量时,后台会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些类型的数据 // 字面量创建 var content = 'i love you!' var subContent = content.substring(2) console.log(subContent) // new String创建 var content = new String('i l

网站前端_EasyUI.基础入门.0002.带你玩转jQuery EasyUI Panel组件 ?

简单介绍: 说明: Panel面板常当作其它内容的容器,可用于创建包含Layout布局/Tabs选项卡/Accordion折叠面板等基础组件,还提供了内置的折叠/关闭/最大化/最小化的行为,你可以将它嵌入到网页的任何位置. 基础用法: <div id="p" class="easyui-panel" title="面板-标题" data-options="iconCls:'icon-save',closable:true,coll