javascript进阶修炼之二——DOM,事件及定时器
获得DOM元素的引用
- 注意document.getElementById,任何依赖于这个方法的代码都会成为IE怪异行为的牺牲品。因为在IE中,这个方法也会通过name属性来寻找匹配的元素。
- 记住,搜索范围越窄,选择速度也就越快。
- 原始的DOM API并不适合实际的元素访问操作,因为它们适用于节点,而不是元素。原始的DOM API会让你陷入到空白节点,注释节点,文本节点等节点的泥潭中去。
document.getElementById("elementId") ;//原始的W3C DOM
$("#elementId"); //jQuery
$("elementId"); //Prototype,MooTools
Ext.getDom("elementId") ;//Ext JS3
dojo.byId("elementId"); //Dojo
document.querySelectorAll("selectors") ;//Native(如上)
$("selectors") ;//jQuery
$$("selectors") ;//Prototype,MooTools
dojo.query("selectors") ;//Dojo
Ext.query("selectors") ;//Ext JS3
动态修饰内容
$(element).css('prop','value');
$(element).css({'prop1':'value1','prop2','value2'});
$(element).css('prop') ;
修改元素的内容
//更新元素的全部内容
$(element).html("<p>new internal HTML</p>");
$(element).text('The <div> and <span> element carry no inherent semantics.');
在DOM加载完成后运行脚本
//在DOM加载时执行指定脚本
$(fx)
监听及停止监听事件
//在某个元素上监听某个事件
$(elementOrSelector).bind('event',handlerFx);
//在多个元素上监听某个事件
$(elements).bind('event',handlerfx);
//停止监听
$(elementOrSelector).unbind('event',handlerFx);
利用事件委托
$('a',$('#container')[0]).on('click',function(){alert('That tickles!')})
$('#container').delegate('a','click',function(){alert('That tickles!')})
而另一方面,delegate方法仅需要查找并存储$(document)元素。
$('a').bind('click',function(e){
e.preventDefault()
e.stopPropagation()}
)
将行为和自定义事件解耦
//jQuery——通过多余的参数传入额外数据
$(elementOrSelector).bind('event',handlerFx);
//jQuery触发自定义事件
$(elements).trigger('event') ;
$(elements).trigger('event',{foo:'bar',baz:42});
$(elements).trigger('event',['bar',42]);
//给element绑定hello事件
element.bind("hello",function(){
alert("hello world!");
}); //触发hello事件
element.trigger("hello");
这段代码这样写似乎感觉不出它的好处,看了下面的例子也许你会明白使用自定义事件的好处了:
我们已一个选项卡的插件为例:我们让ul列表来响应点击事件,当用户点击一个列表项时,给这个列表项添加一个名为active的类,同时将其他列表项中的active类移除,以此同时让刚刚点击的列表对应的内容区域也添加active类。
<ul id="tabs">
<li data-tab="users">Users</li>
<li data-tab="groups">Groups</li>
</ul>
<div id="tabsContent">
<div data-tab="users">part1</div>
<div data-tab="groups">part2</div>
</div>
$.fn.tabs=function(control){
var element=$(this);
control=$(control);
element.delegate("li","click",function(){
var tabName=$(this).attr("data-tab");
//点击li的时候触发change.tabs自定义事件
element.trigger("change.tabs",tabName);
});
//给element绑定一个change.tabs自定义事件
element.bind("change.tabs",function(e,tabName){
element.find("li").removeClass("active");
element.find(">[data-tab='"+ tabName +"']").addClass("active");
});
element.bind("change.tabs",function(e,tabName){
control.find(">[data-tab]").removeClass("active");
control.find(">[data-tab='"+ tabName +"']").addClass("active");
});
//激活第一个选项卡
var firstName=element.find("li:first").attr("data-tab");
element.trigger("change.tabs",firstName);
return this;
};
$("ul#tabs").tabs("#tabsContent");
模拟后台处理
- javaScript本质上是单线程的
- 你的javascript运行线程实际上和你的页面共享了同样的资源。这也意味着,当你的javascript代码运行的时候,任何页面渲染都不会发生。新的内容不会出现,内容无法重排,甚至被其他窗体所遮挡住的页面也无法被重绘。。。总之,什么都做不了。
var handler = window.setTimeout(callback,intervalInMs);
window.clearTimeout(handler);
javascript进阶修炼之二——DOM,事件及定时器的更多相关文章
- JavaScript进阶 - 第9章 DOM对象,控制HTML元素
第9章 DOM对象,控制HTML元素 9-1 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属 ...
- 林大妈的JavaScript进阶知识(二):JS异步行为
JavaScript 是单线程执行的 JavaScript运行在浏览器中.浏览器是多线程的,但只分配了其中一条给JavaScript,作为它的主线程.对于编码者来说,JavaScript是单线程的.因 ...
- javascript进阶修炼之一——javascript必备操做
动态选择方法及属性 使用方括号操作符,比点操作符功能更强大.因为可以在[ ]方括号中使用任何代表成员名称的内容访问对象.包括字面量,保存着成员名称的变量,名称组合,三元操作符.所有这些内容都会被处理成 ...
- JavaScript要点(十二) HTML DOM 事件
HTML DOM 使 JavaScript 有能力对 HTML 事件做出反应. 对事件做出反应 我们可以在事件发生时执行 JavaScript,比如当用户在 HTML 元素上点击时. 如需在用户点击某 ...
- 第一百一十四节,JavaScript文档对象,DOM进阶
JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元 ...
- javascript:理解DOM事件
首先,此文不讨论繁琐细节,但是考虑到读者的心灵感受,本着以积极向上的心态,在此还是会列举示例说明. 标题为理解DOM事件,那么在此拿一个简单的点击事件为例,希望大家看到这个例子后能触类旁通. DOM ...
- JavaScript进阶内容——DOM详解
JavaScript进阶内容--DOM详解 当我们已经熟练掌握JavaScript的语法之后,我们就该进入更深层次的学习了 首先我们思考一下:JavaScript是用来做什么的? JavaScript ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- javaScript事件(二)事件处理程序
一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 前面提到,事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.响应 ...
随机推荐
- Kaggle 项目之 Digit Recognizer
train.csv 和 test.csv 包含 1~9 的手写数字的灰度图片.每幅图片都是 28 个像素的高度和宽度,共 28*28=784 个像素点,每个像素值都在 0~255 之间. train. ...
- Kettle 数据抽取
1.创建数据库连接 2.建立转换 3.指定源数据库和目标数据库的字段映射 一定要在「输出」中勾选「指定字段」,然后点按钮「Get All fields」,再「Enter mapping」,在弹出窗口映 ...
- windows向github提交代码
随便写的,留给自己看. 一.在github上注册并建立自己的仓库http://www.cnblogs.com/keZhenxu94/p/5288488.html 二.安装windows版本git界面工 ...
- url传递数据类型
php中传递数据,get或post方式为啥用字符串传递,为什么不能直接用数组形式,用的话可以吗
- 利用javascript实现页面截图
html2canvas可以通过纯JS对浏览器端经行截屏,但截图的精确度还有待提高,部分css不可识别,所以在canvas中不能完美呈现原画面样式 兼容性: Firefox 3.5+ Google Ch ...
- IdentityServer4在Asp.Net Core中的应用(一)
IdentityServer4是一套身份授权以及访问控制的解决方案,专注于帮助使用.Net 技术的公司为现代应用程序建立标识和访问控制解决方案,包括单点登录.身份管理.授权和API安全. 下面我将具体 ...
- Ubuntu 14.04配置虚拟主机
虚拟主机常用于在一个单独的IP地址上提供多个域名的网站服务.如果有人想在单个VPS的单个IP地址运行多个网站,这是非常有用的.在这个教程中,让我告诉你如何设置在Ubuntu 14.04 LTS的Apa ...
- Android数据库框架-----ORMLite关联表的使用
上一篇已经对ORMLite框架做了简单的介绍:Android数据库框架-----ORMLite 的基本用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用 ...
- HDU 4825 Trie树 异或树!
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- c# Middleware impl
using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; using Syst ...