//parentNode 获取父元素
var el = document.querySelector('div');
var parent = el.parentNode;
3. 兄弟元素
//有过滤器的情况下,获取所有兄弟元素
function getSiblings(el, filter) {
var siblings = [];
el = el.parentNode.firstChild;
do { if (!filter || filter(el)) siblings.push(el); } while (el = el.nextSibling);
return siblings;
}
//有过滤器的情况下,获取兄弟后续元素
//过滤器可缺省
function getNextSiblings(el, filter) {
var siblings = [];
while (el= el.nextSibling) { if (!filter \|\| filter(el)) siblings.push(el); }
return siblings;
}
//有过滤器的情况下,获取前面兄弟元素
//过滤器可缺省
function getPreviousSiblings(el, filter) {
var siblings = [];
while (el = el.previousSibling) { if (!filter \|\| filter(el)) siblings.push(el); }
return siblings;
}
//应用举例
// 过滤函数示例
function exampleFilter(el) {
return elem.nodeName.toLowerCase() == 'a';
}
// 使用
el = document.querySelector('div');
// 获取所有兄弟元素
var sibs = getSiblings(el);
// 获取a兄弟元素
var sibs_a = getSiblings(el, exampleFilter);
4. 获取最近祖先元素
//closest 返回最近祖先元素
//closset 是新特性,只有现代浏览器支持,所以需要polyfill。
var el = document.querySelector('span');
console.log(el.closest('div'));
// matches polyfill
this.Element && function(ElementPrototype) {
ElementPrototype.matches = ElementPrototype.matches ||
ElementPrototype.matchesSelector ||
ElementPrototype.webkitMatchesSelector ||
ElementPrototype.msMatchesSelector ||
function(selector) {
var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;
while (nodes[++i] && nodes[i] != node);
return !!nodes[i];
}
}(Element.prototype);
// closest polyfill
this.Element && function(ElementPrototype) {
ElementPrototype.closest = ElementPrototype.closest ||
function(selector) {
var el = this;
while (el.matches && !el.matches(selector)) el = el.parentNode;
return el.matches ? el : null;
}
}(Element.prototype);
5. 获取后代元素
//遍历子元素
var el = document.querySelector('div');
var children = el.childNodes,
number_of_children = children.length;
for (var i=0; i<number_of_children; i++)
console.log(children[i].innerHTML);
//第一个和后一个
var firstChild = el.firstChild;
var lastChild = el.lastChild;
操作DOM
1. 创建DOM
//createElement() 创建元素
//appendChild 附加元素
var el = document.createElement('div');
el.innerHTML = '<p>Hello World!</p>';
document.body.appendChild(el);
2. 替换DOM
//replaceChild() 替换元素
var el = document.querySelector('div');
var newEl = document.createElement('p');
newEl.innerHTML = '<b>Hello World!</b>';
el.parentNode.replaceChild(newEl, el);
3. 空置DOM
//设置innerHTML为空
var el = document.querySelector('div');
el.innerHTML = '';
4. 删除DOM
//removeChild删除节点
var el = document.querySelector('div');
el.parentNode.removeChild(el);
5. 插入DOM
//在某个元素前插入DOM
function insertBefore(el, referenceNode) {
referenceNode.parentNode.insertBefore(el, referenceNode);
}
//在某个元素后插入DOM
function insertAfter(el, referenceNode) {
referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);
}
//使用
var newEl = document.createElement('div');
newEl.innerHTML = '<p>Hello World!</p>';
var ref = document.querySelector('div.before');
insertBefore(newEl, ref);
//在指定位置插入DOM(文本形式)
引言
本学期的学习内容为利用Javascript的方式实现交互开发,在内容上主要分为三个部分,JS语言基础、文档对象模型(DOM)和浏览器对象模型(BOM)等。
内容
JS语言基础
基础语法
数据类型
运算符
程序结构
条件语句
循环语句
其他语句
JS语言核心对象
数组
Date对象
函数
对象和原型
DOM
事件
获取元素
1. 通过CSS选择器选择元素
2. 通过类名找到元素
3. 通过标签名找到元素
4. 通过ID找到元素
DOM遍历
1. 匹配元素
2. 父元素
3. 兄弟元素
4. 获取最近祖先元素
5. 获取后代元素
操作DOM
1. 创建DOM
2. 替换DOM
3. 空置DOM
4. 删除DOM
5. 插入DOM
操作CSS
获取CSS
设置CSS
BOM
window对象
history对象
navigator对象
常用API
网络存储
cookie对象
locallstorage和sessionstorage
Page Visibility API
后记