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

javascript总结(五)获取设置元素样式与监听元素事件

阅读更多

目录
(一)有关框架
(二)文件组织与代码组织
(三)JS与FLASH交互
(四)ajax局部刷新与RPC
(五)获取设置元素样式与监听元素事件
  (六)页面元素的创建调整与关联
(七)浏览器兼容性问题
(八)WEB软件的前端架构实践

获取与设置element的样式
一、class or style
      某些情况下只能设置style属性:
        1、属性值是一个变量,如动态设置宽高。
        2、为了兼容某些浏览器
      其他情况下,尽量用class,理由有:
  • 做CSS的人员,可以方便更改
  • class可以有一形象的名,使代码更易读
  • 要加一条样式设置或者做一些兼容性的HACK,比较方便
  • 业务逻辑与表现分离
  • class设置和移除更加方便,style则非常麻烦

二、doc声明与浏览器兼容性
        HTML文档头部的DOC声明与不同版本的浏览器都有可能影响到你获取或者设置的样式,对于这个问题,我非常烦恼,我的策略是GOOGLE别人的做法,然后一遍遍的测试。
三、 UI widget中的做法
        在UI widget的代码里面设置和获取元素样式,有两种做法,一种是每次从元素style属性上获当前值,然后设置。第二种是,由widget对象自己维护一个变量,变化此变量时同时变化元素样式。我倾向于第二种,理由如下
  • style属性值更易于被外部因素影响而被改变
  • 获取更加方便,style获取到的值可能还要做进一步的处理
  • 逻辑更清晰,更易于重构,如方便表现与逻辑分离、应用状态、观察者等设计模式

绑定函数到element事件的几种方式
这里讨论的是没有被封装成对象的页面元素的绑定,除非指明了是UI widget
一、绑定行为和响应函数都在页面上
        这是嵌入脚本满天飞时的做法,还经常有重复定义响应函数的行为,A TAB有一个save函数,过一会用户点击了B TAB,又有一个新的save出现,虽然也能用,但要面对这种状态,很无语。

二、把绑定行为和响应函数都在外部脚本中
        这是我改过头了的做法,我把响应函数根据业务逻辑放到不同类里面,然后把绑定也一个也不留的全部放到页面载入后或者AJAX的回调里面,但页面状态是变化的,要弄清楚当前处于什么状态,然后决定要绑哪些元素。结果是在绑定这件事情上一团乱麻。

三、根据不同场景来决定如何绑定
        这是目前的做法,感觉还可以。做法如下:
        1、在JS方法里面绑定的情况
        如果它是在页面中是比较独立的一块(从结构和内容上看),比如sidebar,那么把它的逻辑独立存放于一个独立脚本的类里面,绑定行为放在初始化方法里面。在页面载入或Ajax载入完后调用初始化方法。
        如果它是一个全站都要用到的UI WIDGET,比如TAB、textarea的输入提示,那么给容器一个class,在全站layout的初始化代码中和每个ajax载入页面的回调里查询到这些元素,然后调用相关的UI widget类初始化绑定和行为。目前感觉在每个ajax 回调里都要做查询绑定比较麻烦,考虑试试jQuery全局ajax设定来做这件事。
        如果它是在特定页面要用到的UI WIDGET,在特定页面的初始化方法里面初始化这个UI widget。

        2、在元素事件属性上绑定的情况
        如果这一个局部要绑定到的行为很多,而且它可能经常刷新,此时如果每次都查询这些元素进行绑定,也比较费时费力,所以直接把绑定写在元素事件属性上。
        如果绑定到元素事件响应函数的逻辑比较简单,只是一个行为,比如隐藏元素。或者顺序执行的两个行为,比如清空表单元素内容,并且重新focus。这些情况下,我是直接把JS代码写在事件属性上。但这里有一个前提是,这些代码很短,不影响到维护与阅读。
        非同于上面的情况,且响应函数逻辑有点复杂,此时把响应函数写在相关业务的类里面,然后绑定还是写在事件属性上。



分享到:
评论
3 楼 matin0728 2010-04-06  
绑定函数到element事件的几种方式

应该还有另外一种方法,即使用js 直接产生节点并绑定事件,然后再附加到文档中,不一定是要获取html再使用selector来绑定,这样的效率上会高一些。
2 楼 crazy.j 2010-04-02  
currentStyle(IE) 和 defaultView(FF)
可以取得指定元素的style属性与css文件中定义的全部样式
1 楼 jessdy 2010-03-31  
等着看最后一章。

相关推荐

    JavaScript详解(第2版)

    1.8 JavaScript和事件 9 1.9 标准化JavaScript和W3C 11 1.9.1 JavaScript对象 12 1.9.2 文档对象模型 12 1.10 关于浏览器 13 1.10.1 JavaScript的版本 14 1.10.2 你的浏览器遵循标准吗 16 1.10.3 ...

    HTML事件改变矩形大小,java开发过程展示.docx

    1. 在JavaScript中,获取该矩形元素并添加事件监听器,实现拖拽改变大小的效果: ``` var rectangle = document.getElementById('myRectangle'); rectangle.addEventListener('mousedown', function(event) { ...

    使用JavaScript创建新样式表和新样式规则

    我们使用事件委托来让事件监听器更有效率,使用降频技术来限定某些方法的使用次数,使用各种JavaScript加载器来动态加载我们需要的资源,等等。另外一种让页面更高效、更敏捷的方法是动态的添加或移除样式表里的样式...

    JavaScript实现动态创建CSS样式规则方案

    1.我们通过 事件代理(event delegation) 让事件监听更高效, 2.我们利用 函数降频技术(function debouncing) 来限制一段时间内给定方法被调用的次数,请参考:如何防止事件函数的高频触发(中文翻译) 3.我们使用 ...

    droppable:一个JavaScript库,可为任何HTML元素提供超强的文件丢弃能力

    我想在聚焦时向我的droppable元素添加样式 发展克隆存储库 动机 如果可以将文件拖放到任何HTML元素中,那不是很好吗? 好吧,现在您可以! :party_popper: 特征 限制拖放到单个或多个文件 将文件拖到HTML元素顶部...

    基于JavaScript 实现拖放功能

    HTML 的拖放 API 依赖 DOM 事件模型,获取拖放和放置元素的相关信息,以此实现拖放功能。我们只需要注册很少几个事件监听器,就能把任何元素变成可拖动或可放置的。 拖放 API 除了提供基本的拖放功能接口外,还可以...

    Java语言基础下载

    第十五章:数据结构与算法(下) 247 学习目标 247 数据结构介绍: 248 数组 248 逻辑大小和物理大小 248 链表 248 栈(stack) 249 队列: 250 树: 250 实例分析 252 内容总结 274 独立实践 275 第十六章:数据库...

    超实用的jQuery代码段

    全书分为11章,包含网页效果、DOM元素与属性、HTML事件、CSS样式、用户输入自动完成、拖放、图形图像、AJAX、算法、jQuery Mobile应用、浏览器、Cookies等jQuery技术内容,对提高网站开发人员和设计人员的jQuery技术...

    精通AngularJS part1

    自定义HTML元素与IE的老版本124 47使用过滤器处理模型变换124 内置过滤器125 格式化过滤器125 数组变换过滤器125 编写自定义过滤器——分页示例131 从JavaScript代码中访问过滤器133 过滤器做什么与不做什么...

    JavaScript高级教程

    第 1 章 JavaScript 是什么...............................................1 3 1.1 历史简述..............................................1 1.2 JavaScript 实现................................................

    flex3的cookbook书籍完整版dpf(包含目录)

    在State Changes事件中添加和删除事件监听器 11.11节. 添加视图States到Flash组件 11.12节. 处理StateChange 事件 11.13节. 动态生成States和Transitions 11.14节. 创建State的自定义动作(action) 第十二章. 特效...

    Silverlight2.0功能展示Demo源码

    KeyEventArgs.Key - 与事件相关的键盘的按键 [Input.Key枚举] KeyEventArgs.Handled - 是否处理过此事件 Keyboard.Modifiers - 当前按下的辅助键 [Input.ModifierKeys枚举] 12、Silverlight(14) - 2.0交互之...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    使用XSL,你可以灵活的设置文档显示样式,文档将自动适应任何浏览器和PDA(掌上电脑)。 XSL也可以将XML转化为HTML,那样,老的浏览器也可以浏览XML文档了。 2.CSS CSS大家很熟悉了,全称是Cascading Style ...

    贪吃蛇 函数封装经典案例.docx

    /*设置鼠标悬浮时的按钮样式*/ button{ background-color: coral; } </style> </head> <body> 贪吃蛇游戏的实现 <!--状态信息栏--> <!--历史最高--> 历史最高分:...

    30-seconds-of-angular:精选的Angular代码片段集合,您可以在30秒或更短的时间内理解

    全局事件监听器 注入文件 将React场标记为已触摸 可观测值作为输出 传递模板作为输入 保留空格 重用模板中的代码 重用现有的自定义管道 样式绑定 双向绑定任何属性 使用APP_INITIALIZER延迟应用启动 窗口位置注入 ...

    Java学习笔记-个人整理的

    {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}{24}{subsubsection.1.4.1.1} {1.4.2}格式化输出浮点数}{24}{...

Global site tag (gtag.js) - Google Analytics