操作dom
一、获取dom
依据id获取元素
var el = document.getElmentById('id');
依据class获取元素
var els = document.getElementsByClassName('class');
依据标签名获取元素
var els = document.getElementsByTagName('tag');
依据选择器获取元素
var el = document.querySelector('selector');
var els = document.querySelectorAll('selector');
二、操作元素属性
获取元素属性
var attr = el.<attrName>
修改元素属性
attr.<attrName> = <value>
实例:
var id = el.id; // 获取元素id属性
el.id = 'newId'; // 设置元素id属性
三、操作元素class
className方式
获取class
添加classvar className = el.className;
删除等操作也是对className字符串的操作,这里省略。el.className += ' <newClass>';
classList方式
获取class数组
添加classvar classList = el.classList;
删除classel.classList.add('<newClass>');
是否包含某个classel.classList.remove('<class>');
切换classel.classList.contains('<class>');
按索引访问classel.classList.toggle('<class>');
el.classList.item('<idx>');
四、操作dataset
html5新增了data-*的自定义属性方式。 定义方式
获取dataset定义的数据<div id="demo" data-myData="myData"></div>
var el = document.getElmentById('demo'); var myData = el.dataset.myData;
五、操作style
js访问css属性时,使用驼峰命名方式访问
获取style
设置stylevar backgroundColor = el.style.backgroundColor;
el.style.backgroundColor = '#000';
六、创建、插入、替换、复制和移除dom
创建dom
插入domvar el = document.createElment('<tag>');
替换domparent.appendChild(el); // 将dom插入到容器的最后面 parent.insertBefore(newEl, exsitedEl); // 将dom插入到容器某个子元素的前面
复制domparent.replaceChild(newEl, oldEl);
移除domel.cloneNode(false); // 浅拷贝,只复制当前结点 el.cloneNode(true); // 深拷贝,复制当前结点及其子孙结点
parent.removeChild(el); // 移除容器的el子元素
七、操作dom结点属性
获取结点内容
获取结点名称var text = el.innerText; // 获取结点的文本内容 var html = el.innerHTML; // 获取结点中的dom内容
获取结点值var nodeName = el.nodeName;
获取结点类型var nodeValue = el.nodeValue;
获取父节点var nodeType = el.nodeType;
获取子结点var parentNode = el.parentNode;
var childNodes = el.childNodes;
笔记: nodeType、nodeName可以用于判断标签类型
八、文档信息
document对象可以操控部分文档相关信息。
var title = document.title; // 文档标题
var url = document.URL; // 文档url
var domain = document.domain; // 文档域名
var referrer = document.referrer; // 返回载入当前文档的来源文档的URL
笔记: domain可以被设置,可以用于解决内嵌框架跨域问题。 比如,一个页面的domain为www.wrox.com,而内嵌页面为www.p2p.wrox.com 这样把两个页面的domain都设置为wrox.com可以解决跨域。
document.domain = 'wrox.com';
值得注意的是:松散的domain不能设置成紧绷的domain
document.domain = 'wrox.com'; // 松散的 document.domain = 'p2p.wrox.com'; // 紧绷的
九、特殊集合
document对象具有一些特殊的集合,支持快速访问页面某些元素
document.anchors // 返回所有带name的a标签
document.links // 返回所有带href的a标签
document.forms // 返回所有的form标签
document.images // 返回所有的img标签
十、操作特性
除了直接使用点运算符访问结点特性外,还可以使用getAttribute等属性操作特性。
el.getAttribute('<attr>'); // 获取特性值
el.setAttribute('<attr>', <value>); // 设置特性
el.removeAttribute('<attr>'); // 移除特性
除了上面常见的用法外,元素还存在attributes属性,它是元素结点中的所有属性结点的集合。
el.attributes.getNamedItem('<attr>').nodeValue; // 获取属性结点的结点值
el.attributes.removeNamedItem('<attr>'); // 移除属性结点
// 添加属性结点
var attrNode = document.createAttribute('<attr>'); // 创建属性结点
attrNode.nodeValue=<value>; // 设置属性结点的结点值
el.attributes.setNamedItem(attrNode); // 设置元素的属性结点
笔记:
- 除了使用getNamedItem等方法外,attributes属性也可以使用
[]
操作符访问和赋值。- 一般而言,attributes属性并不常用,除非要遍历一个元素结点中所有的特性时才会用到。
十一、插入动态脚本和动态样式
动态加载外部脚本
function loadExternalScript(url){
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
document.body.appendChild(script);
}
动态加载内嵌脚本
function loadInnerScript(code){
var script = document.createElement('script');
script.type = 'text/javascript';
try{
script.appendChild(document.createTextNode(code));
}catch(e){
script.text = code; // ie,因为ie不能访问script的子节点
}
document.body.appendChild(script);
}
动态加载外部样式表
function loadExternalStyle(url){
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = url;
var head = document.getElementsByTagName('head')[0];
head.appendChild(link);
}
动态加载内部样式表
function loadInnerStyle(code){
var style = document.createElement('style');
style.type = 'text/css';
try{
style.appendChild(document.createTextNode(code));
}catch(e){
style.cssText = code; // ie,原因与script一样
}
var head = document.getElementsByTagName('head')[0];
head.appendChild(style);
}