Javascript中的事件
事件捕获(capturing)和事件冒泡(bubbling)
添加事件处理程序的两种方法
// onclick=null
elem.addEventListener(“click”, e_func, false); //elem.removeEventListener(‘click’, e_func, false); //false 表明在冒泡阶段被触发
事件对象
e.bubbles // true or false 是否冒泡
e.cancelable // true of false 是否可取消默认行为
e.currentTarget // 正在处理事件的元素,事件处理程序中的this指向该元素
e.target // 事件发生的目标元素
e.defaultPrevented // true or false 默认行为是否被取消
e.detail
e.eventPhase // 1 捕获阶段 2 处于目标 3冒泡阶段
e.preventDefault()
e.stopImmediatePropagation() //阻止事件冒泡 ...
DOM中的选择符API及元素遍历
选择符API
document.querySelector(css_selector) var checked_radio = document.querySelector(‘.checked’);
var node_list = document.querySelector(css_selector);
elem.matchesSelector(css_selector) // true or false
HTML 5中的类名操作classList是DOMTokenList的实例,因而具有以下方法:
elem.classList.add(value); 如果已经有了就不添加了
elem.classList.contain(value) //true or false
elem.classList.remove(value)
elem.classList.toggle(value); 如果有就删除,如果没有就添加
元素遍历Element新增5个属性:
childElementCount: 子元素的个数(不包括Text和Comment类型)
f ...
Javascript中的DOM节点类型
Node类型
node.nodeType:
Node.ELEMENT_NODE(1);
Node.ATTRIBUTE_NODE(2);
Node.TEXT_NODE(3);
Node.CDATA_SECTION_NODE(4);
Node.ENTITY_PREFERENCE_NODE(5);
Node.ENTITY_NODE(6);
Node.PROCESSING_INSTRUCTION_NODE(7);
Node.COMMENT_NODE(8);
Node.DOCUMENT_NODE(9);
Node.DOCUMENT_TYPE_NODE(10);
Node.DOCUMENT_FRAGMENT_NODE(11);
Node.NOTATION_NODE(12);
node.nodeName: 标签名
node.childNodes[0] node.childNodes.item(0);
node.childNodes.length;
node.parentNode;
node.nextSibling;
nod ...
Javascript中的history对象
history.go(): 参数为负数表示后退,正数表示前进; 接URL表示跳到历史记录最近的URL
history.back(): 后退一个页面
history.forward(): 前进一个页面
history.length: 历史记录的个数
Javascript中的navigator对象
navigator.appVersion
navigator.buildID // firefox
navigator.cookieEnabled
navigator.javaEnabled()
navigator.mimeTypes
navigator.language
navigator.onLine
navigator.oscpu
navigator.platform
navigator.plugins
navigator.userAgent
Javascript中的location对象
window.location === document.location // true
location的属性列表
修改location的属性会导致页面刷新并产生新的历史记录
window.location = “URL” 和 location.href=”URL”效果一样,都会调用location.assign(URL)
location.replace(URL)不会产生新的历史记录,而且会禁用后退
location.reload(true): 重新加载页面,参数可以选择是否从服务器加载(而不是从缓存加载)
Javascript中的window对象
window对象的两个作用:
表示浏览器的一个实例
ECMAscript中的Global对象 直接定义Global变量与在window上定义Global变量的区别是:直接定义的Global变量的[[configurable]]特性为false,也就是说,它不能用delete删除
窗口关系及框架
如果html中包含框架(frame),那么每个框架都有自己的window对象,它们从上到下,从左到右,依次存放于window.frames数组中。可以通过window.frames[index]或者window.frames[frame_name]来获取frame的window对象
window.name为frame的name
top对象表示最外层html的window对象
parent对象表示上层frame的window对象
self表示frame自身的window对象
窗口位置
window.screenLeft window.screenTop 或者firefox中的window.screenX window.screenY表示窗口左上角的位置 va ...
Javascript中的函数表达式
函数声明 有提升 而函数表达式没有,因此不应该通过if…else来声明函数
if (condition) {
function sayHi() {}
} else {
function sayHi() {}
}
在递归函数中使用arguments.callee可以避免因函数名改变产生的错误。
function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(num - 1);
}
}
闭包是指函数中定义的函数,闭包的作用域链中包含父函数的执行环境(变量对象),所以即使父函数退出,如果闭包仍然被引用,那么父函数的变量对象就一直存在于内存中。所以,过度的使用闭包会导致内存占用过多
闭包的另外一个副作用是闭包只能取得父函数中变量的最后一个值,例如: function createFunctions() {
...
Javascript中的对象
属性的类型1.1 数据类属性数据类属性的属性——特性为:
[[Configurable]]: 默认为true。表示能否通过delete删除属性,能否修改属性的特性。
[[Enumerable]]: 默认为true。表示在用for-in迭代对象时,能否迭代出该属性。
[[Writable]]: 默认为true。表示能否修改属性的值。
[[Value]]: 默认为undefined。保存属性的值。
1.2 访问器类属性访问器类属性的特性为:
[[Configurable]]: 默认为true。表示能否通过delete删除属性,能否修改属性的特性。
[[Enumerable]]: 默认为true。表示在用for-in迭代对象时,能否迭代出该属性。
[[Get]]: 默认为undefined。读取属性时调用的函数。
[[Set]]: 默认为undefined。写入属性时调用的函数。
使用访问器类型的属性的常用方法是写入该属性时往往会导致其他属性也跟着变化。
1.3 对特性的操作方法:Object.defineProperty(Object, prop ...
Javascript中的单体内置对象
Global
encodeURI() encodeURIComponent(): 用utf-8编码替换URI中的无效字符,区别在于encodeURI并不对属于URI的特殊字符进行编码,如:// #?等
eval(“var msg=’hello world’”); alert(msg);
Global对象的属性:
undefined
NaN
Infinity
Object
Array
Function
Boolean
String
Number
Date
RegExp
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
可通过window对象来访问global对象的变量和函数
var global = function(){return this;}();
Math
Math对象的属性:
Math.E
Math.LN10
Math.LN2
Math.LOG2E
Math.LOG10E
M ...