1:HTML5新增方法
getElementByClassName("name1 name2.....")
可以指定多个类名,且顺序不影响,匹配到的元素是类名同时具有name1和name2的(可以有多的类名)
因为比较新的浏览器才支持这个,所以最好写成这样一个函数:
<span style="white-space:pre"> </span><script>
/*
node是DOM树中的搜索起点,classname为需要搜索的类名
*/
function getElementByClassName(node,classname){
if(node.getElementByClassName)
return node.getElementByClassName(classname);
else{
var results=new Array();
var elems=document.getElementsByTagName("*");
for(var i=0;i<elems.length;i++){
if(elems[i].className.indexOf(classname)!=-1){
results[results.length]=elems[i];
}
}
return results;
}
}
</script>
2:getAttribute,setAttribute
这两种方法不属于document对象,所以不能通过document对象调用,它只能通过元素节点对象调用
小例子:
var paras=document.getElementsByTagName("p");
for(var i=0;i<paras.length;i++){
var title_text=paras[i].getAttribute("title");
if(title_text){
paras[i].setAttribute("title","blablabla");
alert(paras[i].getAttribute("title"));
}
}
3:chiledNodes与nodeType
childNodes属性可以用来获取任何一个元素的所有子元素(仅儿子辈),是一个数组
但childNodes属性返回的数组包含所有类型的节点,而不仅仅是元素节点(空格,换行都会被解释为节点)
可以用nodeType属性,可以知道节点类型(一共12种)
nodeType==1 元素节点
nodeType==2 属性节点
nodeType==3 文本节点
而element.children 就相当于 element.childNodes(nodeType==1)
4:nodeValue
可以返回或设置指定节点的节点值
其中需要注意些地方,具体在例子中体现:
<HEAD>
<TITLE>空谷悠悠</TITLE>
</HEAD>
<BODY>
<table>
<tr>
<td id="john" name="myname">John</td>
<td>Doe</td>
<td id="jack">Jack</td>
</tr>
</table>
<script>
var d = document.getElementById("john");
alert(d.nodeType)
alert(d.nodeName)
alert(d.nodeValue)
/*nodeType:ELEMENT_NODE
nodeType值:1
nodeName:元素标记名 //此处为TD
nodeValue:null
*/
var d = document.getElementById("john").getAttributeNode("name");
alert(d.nodeType)
alert(d.nodeName)
alert(d.nodeValue)
/*
nodeType:ATTRIBUTE_NODE
nodeType值:2
nodeName:属性名 // name
nodeValue:属性值 //myname
*/
var d = document.getElementsByTagName("td")[0].firstChild //<td>元素本身的nodeValue是空,需要的是它包含的文本节点的值!!
alert(d.nodeType)
alert(d.nodeName)
alert(d.nodeValue)
/*
nodeType:TEXT_NODE
nodeType值:3
nodeName:#text
nodeValue:文本内容 // John
*/