NodeList
NodeList代表一个有顺序的节点列表
NamedNodeMap
NamedNodeMap代表一个无顺序的节点列表
HTMLcollection
HTML DOM 中的 HTMLCollection 是“活”的;如果基本的文档改变时,那些改变通过所有 HTMLCollection 对象会立即显示出来。
例如
var divs=document.getElementsByTagname('div'); //取得所以div的 HTMLCollection;
var i,div;
for(i=0;i<divs.length;i++)
{
div=document.createElement('div');
document.body.appendChild(div);
}
* 这样会产生死循环,因为NodeList,NamedNodeMap,HTMLCollection三个对象在文档变化的时候也会跟着更新,因此divs.length在不断的变化,如果想要正常得迭代Nodelist的话应在刚开始就把divs.length初始化第二变量
var divs=document.getElementsByTagName('div');
var i,div,len;
for(i=0,len=divs.length;i<len;i++)
{
div=document.createElement('div');
document.body.appendChild(div);
}
1.动态脚本
var script=document.createElement("script");
script.type="text/javascript";
script.appendChild(document.createTextNode("function syaHi(){alert(''hi);}"));
document.body.appendChild(script);
*动态添加脚本无法知道是否已经load;
*以上代码在IE无效,在IE浏览器,js代码必须用text属性添加
例如
function loadScriptString(code)
{
var script=document.createElement("script");
script.type="text/javascript";
try
{
script.appendChild(document.createTextNode(code));
}
catch(e)
{
script.text=code; //兼容IE
}
document.body.appendChild(script);
}
调用函数示例
loadScripgString("function sayHi(){alert('hi');}");
2.动态样式
function loadStyleString(css)
{
var style=document.createElement('style');
style.type="text/css";
try
{
style.appendChild(document.createTextNode(css)); //SF FF CH
}
catch(e)
{
style.styleSheet.cssText=css; //IE
}
var head=document.getElementsByTagName('head')[0];
head.appendChild(style);
}
选择符API
querySelector()
返回css选择符的第一个元素,没找到返回null
querySelectorAll()
返回css选择符找到的nodelist,没找到返回空的nodelist
matchesSelector()
这个方法是Element类型新增方法,接收一个参数,如果调用元素与该选择符匹配,返回true,否则返回false
例如:
if(document.body.matchesSelector('body.page'))
{
//true;
}
元素遍历
对于元素间的空格,IE9及之前版本不会返回文本节点,而其他所有浏览器会放回文本节点,这样导致在使用childNodes和 firstChild等属性时的行为不一致,因此Element Traversal规范新定义了一组属性
childElementCount:返回子元素(不包括文本节点和注释)的个数
firstElementChild:指向第一个子元素:firstChild的元素版
lastElementChidl:指向最后一个子元素:lastChild的元素版
previousElementSibling:指向前一个同辈元素;previousSibling的元素版
nextElementSibling:指向后一个同辈元素;nextSlibling的元素版
HTML5(DOM相关内容)
1.与类相关的扩充
-getElementByClassName(); 元素的类选择器,性能有优势。可传多个类名(‘class1 class2’),先后无影响
-classList属性 对class进行添加,删除,是DOMTokenList的实例,有length属性,可以用item()跟[]取得对应的元素,还有以下方法
-add(value) 添加给定字符串到列表,如果存在不添加
-contains(value) 如果有value存在返回true
-remove(value) 如果有value,移除
-toggle(value) 如果列表有value,移除他,如果没有value,添加他。
2.焦点管理
-document.activeElement属性 ,该属性始终会引用焦点元素
例如:document.getElementById('mybutton').focus();
if(document.activeElement==button) //true;
-hasFocus()方法 确认文档是否获得焦点
3.HTMLDocument变化
-document.readyState属性,新增。 返回loading是正在加载,返回complete是已经加载完
-document.head 直接引用<head>
例如:var head=document.head || document.getElementsByTagName('head');
-document.charset 字符集属性 //浏览器全部支持
-defaultCharset 浏览器和系统默认的字符集设置 //FF 不支持
例如 alert(document.charset); //"utf-8" document.charset="gbk13"
if(document.charset==document.defaultCharset)
{
//true;
}
-自定义数据属性 必须加data-,为了表示于元素渲染无关
例如 <div id="mydiv" data-num=1></div>
var div=document.getElementById('mydiv');
//获取自定义数据属性
var g=div.dataset.num;
//设置自定义数据属性
div.dataset.num=3;
//有没有num属性
if(div.dataset.num)