DOM供应了许多体式格局猎取文档元素, 能够很轻易的查询文档中一个或许多个元素[一组元素鸠合], 有以下几种体式格局:
经由历程指定的元素id属性(attribute) – [getElementById]
经由历程指定的name属性 – [getElementsByName]
经由历程指定的标署名 – [getElementsByTagName]
经由历程指定的CSS Class名 – [getElementsByClassName]
经由历程婚配的CSS选择器 – [querySelector/querySelectorAll]
搜检对应的HTML元素是不是于参数选择器婚配 – [matchesSelector]
一些特别鸠合
经由历程id属性猎取元素
任何HTML元素都能够定义id属性, 然则一般它在文档中是唯一的. 因此我们一般运用id猎取到的只是一个自力的唯一的元素对象. 我们能够运用Document对象的getElementById()要领猎取指定的id的元素对象.
document.getElementById(‘id’);
假如在婚配的历程当中不存在参数中通报的响应的id元素, 则getElementById()要领返回null. id参数的婚配历程当中辨别大小写, 然则在IE8之前的版本中getElementById()要领并不辨别ID的大小写, 而且假如页面中存在多个同名的ID元素, 这个要领只会返回婚配第一个元素对象.
运用getElementById()要领猎取到的是一个元素对象, 因此这个对象也有属性和要领. 便能够运用效果对象的相干属性和要领举行其他操纵. 如:
var dom = document.getElementById(‘id’);
dom.style.backgroundColor = ‘#FFF’;
注重: 在IE8之前的版本中, getElementById()要领会婚配name属性与id同名的表单元素. 因此假如须要确保不会猎取到表单元素, 须要在页面中保证不会涌现name值与id名雷同的表单元素.
经由历程name属性猎取元素
getElementsByName()要领是只要HTMLDocument范例才有的要领, 因此它只对HTML文档可用. 它用于返回具有指定name特征的一切元素, 即一个NodeList对象(相当于一个包括一组Element对象的只读数组). 注重这里name属性不一定是单个的元素, 多是一组元素的鸠合(HTMLCollection). 比方具有雷同name属性值的一组表单元素(单选或许复选框).
document.getElementsByName(‘name’);
getElementsByName()要领返回的NodeList对象也有许多属性和要领, 一样能够应用它的属性和要领举行其他操纵.
注重: 在某些版本的IE中getElmentsByName()要领会婚配具有同名id属性值的元素. 因此须要警惕的防止.
经由历程HTML标署名猎取元素
Document对象有一个getElementsByTagName()要领, 它接收一个HTML标署名作为参数, 并获得婚配一切的婚配的标署名的元素, 它也返回一个NodeList对象. 返回的元素鸠合根据这些元素在文档中的递次排列.
document.getElementsByTagName('div'); // 猎取文档中的一切div元素
document.getElementsByTagName('p'); // 猎取文档中的一切p元素
document.getElementsByTagName('*'); // 猎取文档中的一切元素
getElementsByTagName()不仅可用于Document对象, 它还能够基于现有的Element对象, 猎取其子女元素.
var firstDiv = document.getElementsByTagName('div')[0];
var spans = firstDiv.getElementsByTagName('span'); // 猎取文档中第一个div中的一切span元素
一样的, 运用getElementsByTagName()要领猎取的NodeList也有许多属性和要领, 能够应用相干的属性和要领举行其他操纵. 下面展现了几个罕见的属性和要领.
var div = document.getElementsByTagName('div');
div.length; // 猎取文档中div的数目
div[0].id; // 猎取文档中第一个div的id属性值, 假如它存在
div.item(0).id; // 经由历程NodeList的item要领猎取文档中第一个div的id属性值
var images = document.getElementsByTagName('img');
images.nameItem('name'); // 猎取images鸠合中具有name属性值的元素
注重:
getElememtsByTagName();不辨别HTML标签的大小写.
在初期版本的IE中, 因为解释被完成为元素, 因此document.getElementsByTagName(‘*’);也会返回一切的解释节点.
经由历程ClassName猎取元素
HTML5中添加了一个getElementsByClassName()要领用于猎取指定className(class在JavaScript中是关键字, 因此在DOM操纵中运用className替换)值的元素. 这个要领能够经由历程Document对象或许现有的元素对象挪用. 它接收一个或多个[空格支解]className值(递次无关), 返回婚配的NodeList对象(它返回的是子女元素).
var items = document.getElementsByClassName('item'); // 猎取文档中一切className为'item'的元素
var doms = document.getElementsByClassName('a b'); // 猎取文档中一切同时具有className为a和b的元素
var users = document.getElementById('list').getElementsByClassName('user'); // 猎取文档中id为list的元素下一切className为user的元素
运用getElementsByClassName()不在局限于运用id或许标署名的体式格局猎取元素. 但注重它返回的是NodeList对象, 一个只读情势的类数组对象. 在运用历程须要防止直接对NodeList举行操纵.
注重: 在”奇异形式中”getElementsByClassName()要领在婚配className时不辨别大小写.
因为IE9之前的版本并不支撑这个要领, 因此须要基于现有的手艺模仿完成. 下面供应一个<<JavaScript设想形式>>作者完成的版本:
function getElementsByClass(searchClass,node,tag) {
var classElements = new Array();
if ( node == null ){
node = document;
}
if ( tag == null ){
tag = '*';
}
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}
扩大浏览: document.getElementsByClassName抱负完成
querySelector()要领
W3C范例的Selector API Level1中供应了两个中心的要领querySelector()和querySelectorAll(), 能够经由历程Document对象或许基于现有的元素, 以及在文档片断(DocumentFragment)中挪用这两个要领猎取婚配的元素.
querySelector()要领接收一个CSS选择符字符串, 返回与这个选择符形式婚配的第一个元素. 假如没有婚配则返回null.
var body = document.querySelector('body'); // 猎取body元素
var firstLi = document.querySelector('#list li:first-child'); // 猎取id为list的元素中第一个li元素
var dom = document.getElementById('id');
var lastLi = dom.querySelector('li:last-child');
// 猎取文档中id为id的元素下末了一个li元素, 经由历程现有的元素挪用querySelector要领猎取
注重:
范例中并没有划定请求querySelector()支撑CSS3选择器
querySelector()要领并不能应用于相似:first-line/:visited等婚配文本节点的伪元素或许婚配元素状况的伪类中.
兼容性:
Chrome FireFox Safari Opera IE
1 3.5 3.2 10 8