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都是事件的名字.响应 ...
随机推荐
- RabbitMQ 之 订阅模式 Publish/Subscribe
模型图 我们之前学习的都是一个消息只能被一个消费者消费,那么如果我想发一个消息 能被多个消费者消费,这时候怎么办? 这时候我们就得用到了消息中的发布订阅模型 在前面的教程中,我们创建了一个工作队列,都 ...
- thinkphp3.2笔记(1)目录,控制器及url模式,地址解析
一.目录 Application : tp默认的应用代码存储的目录 Public : Tp 默认的存储静态资源的目录,img,css,js ThinkPHP : Tp 框架的源代码 ...
- [转]通过rsync+inotify-tools+ssh实现触发式远程实时同步
文件的同步镜像在很多地方都需要用到,因此rsync这款免费软件得到了广泛的应用,包括在Windows平台上,都已经有了支持rsync的“cwRsyncServer”. 但是,我们一般都是通过结合cro ...
- SPOJ-394-ACODE - Alphacode / dp
ACODE - Alphacode #dynamic-programming Alice and Bob need to send secret messages to each other and ...
- Hibernate入门_增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private ...
- IOS-如何锁定Xcode的API头文件
如何锁定Xcode的API头文件1, 打开终端2, 前往Xcode.app, 命令: cd /Applications/Xcode.app3, 把头文件修改为只读, 命令: sudo chown -h ...
- git推送文件到远程仓库
远程仓库未创建 git init 初始化一只本地仓库 把你的项目扔进去(或者基于初始化仓库建立项目vue init webpack demoxxxx) git status //查看状态 git ad ...
- 面向对象:三大特性、类成员、property
一.类的基础知识 python 一切皆为对象. 我们以前的str,list,int 都是对象. 1.1 类的定义 与 调用 class 关键字用来定义类,注意类名首字母大写. 类的调用,先实例化一个类 ...
- vue 可编辑表格组件
<template> <div class="table"> <table border="1px" v-dragform> ...
- lombok --- 常用注解解析
@Data@Getter @Setter @ToString@Cleanup@NonNull@Builder@EqualsAndHashCode