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都是事件的名字.响应 ...
随机推荐
- kubectl delete
kubectl delete 通过配置文件名.stdin.资源名称或label选择器来删除资源. 支持JSON和YAML格式文件.可以只指定一种类型的参数:文件名.资源名称或label选择器. 有些资 ...
- R中的sub替换函数【转】
R中的grep.grepl.sub.gsub.regexpr.gregexpr等函数都使用正则表达式的规则进行匹配.默认是egrep的规则,也可以选用Perl语言的规则.在这里,我们以R中的sub函数 ...
- 前端解析cookie出现多余的双引号的问题
登录界面,用户提交后,后台获取到用户名密码,然后会设置cookie,以便于前端使用,今天在修改项目记住密码的功能的时候,读取cookie,如果存在loginInfo字段说明用户在上一次点击了记住密码的 ...
- 【Python】简单实现爬取小说《天龙八部》,并在页面本地访问
背景 很多人说学习爬虫是提升自己的一个非常好的方法,所以有了第一次使用爬虫,水平有限,依葫芦画瓢,主要作为学习的记录. 思路 使用python的requests模块获取页面信息 通过re模块(正则表达 ...
- Java的 final 关键字
本文主要探讨Java final 关键字修饰变量时的用法. !!!!文末有彩蛋!!!! 1.修饰类 当用final修饰一个类时,表明这个类不能被继承.也就是说,如果一个类你永远不会让他被继承,就可以用 ...
- flask学习(五):使用配置文件
1. 新建一个config.py文件 2. 在主app文件中导入这个文件,并且配置到app中,示例代码如下: import config app.config.from_object(config) ...
- flask学习(三):flask入门(URL)
一. flask简介 flask是一款非常流行的python web框架,出生于2010年,作者是Armin Ronacher,本来这个项目只是作者在愚人节的一个玩笑,后来由于非常受欢迎,进而成为一个 ...
- hdu 1211 逆元
RSA Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 批量管理增量日志(seek、tell)
f = open('/usr/home/yongsan/size_text','r+') f.read()
- 无密码登陆的ssh和ssh-agent
原文地址:http://lxshopping.blog.51cto.com/4542643/1179864/ 一,不需要输密码的ssh 原理:首先服务器端把公钥传给Client端,Client端在验证 ...