2015-02-07——js笔记
示例1:
var abc;
console.log(abc === undefined);
console.log(abc === null);
console.log(typeof abc === undefined);
console.log(typeof abc === 'undefined');
=> true;
=> false;
=> false;
=> true;
示例2:
var ceshi = document.getElementById('ceshi');
ceshi.abc = '1111';
var abc = '2222';
function ceshiListener() {
alert(this.abc);
}
ceshi.addEventListener('click', ceshiListener, false);
=> 1111
PS:测试结果,在W3C标准中,侦听器的this的执行环境为被侦听对象。
示例3:
var ceshi = document.getElementById('ceshi');
ceshi.abc = '1111';
var abc = '2222';
function ceshiListener() {
alert(this.abc);
}
ceshi.attachEvent('onclick', ceshiListener);
=> 2222
PS:测试结果,在IE10及以下版本中,侦听器的this的执行环境为window。但在IE11中已不支持attachEvent。
示例4:
指定MSIE标准的事件侦听器中this的执行环境,解决示例3中的问题。
要素:1、将原函数传递给被侦听节点对象某成员。2、注意MSIE标准,不自动传递事件对象window.event给侦听器
示例代码:
node['abc'] = listener; //改变this执行环境
node['delegate'] = function () {
node['abc'](window.event); //针对IE不自动传递事件对象给侦听器
};
node.attachEvent('onclick', node['delegate']);
示例5:
var ceshi = 1;
function abc(ceshi) {//传入的参数名为特殊的局部变量
ceshi = 2; //局部变量
alert(ceshi);
}
abc();
alert(ceshi);
=> 2
=> 1
PS:传入同名参数,可截断作用域链。不影响上级变量,上级变量也不自动传入。
示例6:
全局替换
var a = 'dede';
var b = a.replace(/d/g, '-');
alert(a);
alert(b);
=> dede
=> -e-e
示例7:
关于转义
字符串中,一个\代表转义,单个\可直接忽视。两个\\,输出\。转义不能转义的字符时,转义失败,但\并不输出。
正则表达式中,一般情况下,对于-,转义字符\,可加可不加,出于良好的语义,最好加上。
示例代码:
var abc = 'my\-class\-abc';
var ceshi = abc.replace(/\-/g, '\\-');
alert(abc);
alert(ceshi);
=> my-class-abc
=> my\-class\-abc
var abc = 'my-class-abc';
var ceshi = abc.replace(/\-/g, '\\-');
alert(abc);
alert(ceshi);
=> my-class-abc
=> my\-class\-abc
var abc = 'my\-class\-abc';
var ceshi = abc.replace(/-/g, '\\-');
alert(abc);
alert(ceshi);
=> my-class-abc
=> my\-class\-abc
示例8:
改变函数执行环境
示例代码:
function changeFuncEnv(obj, func) {
return function () {//不用function包装,会立刻执行func函数。且不可接受自定义参数。
func.apply(obj, arguments);
}
}
示例9:
得到浏览器宽高
示例代码:
function getBorwerSize() {
var w3cDom = document.documentElement;
return {
'width': window.innerWidth || (w3cDom && w3cDom.clientWidth) || document.body.clientWidth,
'height': window.innerHeight || (w3cDom && w3cDom.clientHeight) || document.body.clientHeight
};
}
示例10:
基本的nodeType
ELEMENT_NODE: 1,
ATTRBUTE_NODE: 2,
TEXT_NODE: 3,
CDATA_SECTION_NODE: 4,
ENTITY_REFERENCE_NODE: 5,
ENTITY_NODE: 6,
PROCESSING_INSTRUCTION_NODE: 7,
COMMENT_NODE: 8,
DOCUMENT_NODE: 9,
DOCUMENT_TYPE_NODE: 10,
DOCUMENT_FRAGMENT_NODE: 11,
NOTATION_NODE: 12
示例11:
线性遍历节点
function walkDOMLinear(node, func) {
node = node || doucment;
var nodes = node.getElementsByTagName('*');
for (var i = 0; i < nodes.length; i++) {
func.call(nodes[i]);
}
}
示例12:
深度递归遍历节点
function walkDOMRecursive(node, depth, func) {
var root = node || window.document;
var node = root.firstChild;
func.call(root, depth++);
if (node) {
walkDOMRecursive(node, depth, func);
node = node.nextSibling;
}
}
示例13:
深度递归遍历节点属性(未验证)
function walkDOMAttrRecursive(node, depth, func) {
var root = node || window.document;
var node = root.firstChild;
if (root.attributes) {
for (var i = 0; i < root.attributes.length; i++) {//将属性节点视为普通节点,遍历
func(root.attributes[i], depth);
}
}
depth++;
while (node) {
walkDOMAttrRecursive(node, depth, func);
node = node.nextSibling;
}
}
2015-02-07——js笔记的更多相关文章
- [2017.02.07] Lua入门学习记录
#!/home/auss/Projects/Qt/annotated/lua -- 这是第一次系统学习Lua语言 --[[ 参考资料: 1. [Lua简明教程](http://coolshell.cn ...
- 02: vue.js常用指令
目录:Vue其他篇 01: vue.js安装 02: vue.js常用指令 目录: 1.1 vuejs简介 1.2 选择器:根据id.class等查找 1.3 静态绑定数据 data 1.4 插值 { ...
- Data Visualization and D3.js 笔记(1)
课程地址: https://classroom.udacity.com/courses/ud507 什么是数据可视化? 高效传达一个故事/概念,探索数据的pattern 通过颜色.尺寸.形式在视觉上表 ...
- js笔记-0
#js笔记-0 数组: indexOf方法: Array也可以通过indexOf()来搜索一个指定的元素的位置: var arr = [10, 20, '30', 'xyz']; arr.indexO ...
- 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II
[算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...
- Node.js 笔记02
一.关于命令 常用命令: dir 列出当前目录下面所有的文件 cd 目录名 进入到指定的目录,. 当前目录, .. 进入上级目录,cd . 当前目录, cd .. 上级目录 md 目录名 创建文件夹 ...
- 2015年10月23日JS笔记
ECMAScript标准:JavaScript核心语法 微软:Jscript ECMAScript标准:一纸空文 JavaScript和JScritp都号称完全实现了 ECMAScript标准 W3C ...
- JS笔记—02
1.String截取:substr:截几位, substring:截到哪. 2.String的操作,例如变大写,小写,本身不会变,只是在栈里交换引用似的 var str = "hello w ...
- Node.js笔记07——不使用generator自定义一个项目,深入了解项目结构
一.初始化项目 新建项目 git init manager 新建view文件夹,建几个静态文件夹 新建app.js 快速初始化项目依赖 npm init -y 安装express npm instal ...
- iOS 学习笔记 二 (2015.02.26)
How To Use Git Source Control with Xcode in iOS 6 If you're new here, you may want to subscribe to m ...
随机推荐
- CSDN下载频道于2014年7月17日改版,23日-24日系统维护
尊敬的用户你们好: CSDN于2005年推出了下载服务,经过数年的发展,下载频道的用户已经为无数用户提供了帮助.分享500万的技术资源. 感谢用户们的资源共享精神,以及对CSDN下载频道的支持 下载频 ...
- HTML5开发移动web应用——Sencha Touch篇(10)
我们把数据可视化出来,为的就是进行一些针对数据的操作. 这里介绍一下DataView的排序功能和搜索功能. 掌握这两个技能,能够让写出的数据界面内的数据能够依据要求进行排序,能够进行数据的搜索显示灯功 ...
- 调用腾讯QQ启动
http://wpa.qq.com/msgrd?v=3&uin=88888888&site=qq&menu=yes
- Leetcode:integer_to_roman
一. 题目 将给定的数字(阿拉伯数字)转化成罗马数字. 数字不会大于3999 二. 分析 首先我们要知道神马是罗马数字,尽管听说过.但事实上我还真没有记住,于是就google了下,具体 ...
- 使用Nginx的proxy_cache缓存功能取代Squid(转)
Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...
- 美团HD(6)-添加搜索遮罩
DJSelectCityViewController.m /** SearchBar开始编辑 */ - (void)searchBarTextDidBeginEditing:(UISearchBar ...
- C#动态调用WCF接口(2)
如何使用 1.第一种方式比较简单,而且也是大家喜欢的,因为不需要任何配置文件就可解决,只需知道服务契约接口和服务地址就可以调用. 2.使用Invoke的方式,但是需要在调用客户端配置WCF,配置后在I ...
- spring boot 打包报错
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.0.RELEASE:repac ...
- SpringMVC学习(一)小demo
首先看一下整个demo的项目结构: 第一步是导入Spring MVC单独使用时的最少jar包: 第二步在项目的web.xml中配置Spring MVC提供的拦截请求的Servlet: 全类名是:org ...
- Javascript模块规范
因为有了模块,就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是有一个前提,就是大家必须以同样的方式编写模块. 目前,通行的Javascript模块规范共有两种:CommonJS和AMD ...