【EASYDOM系列教程】之定位页面元素

Document 对象供应了属性和要领完成定位页面元素功用,这也是 DOM 的标准范例中 Document 对象的重要运用之一。

定位页面元素要领

现在 Document 对象供应完成定位页面元素的要领具有以下几种:

  • getElementById()要领:经由过程页面元素的 id 属性值定位元素。

  • getElementsByName()要领:经由过程页面元素的 name 属性值定位元素。

  • getElementsByTagName()要领:经由过程页面元素的元素名定位元素。

  • getElementsByClassName()要领:经由过程页面元素的 class 属性值定位元素。

  • querySelector()要领:经由过程 CSS 选择器定位第一个婚配的元素。

  • querySelectorAll()要领:经由过程 CSS 选择器定位一切婚配的元素。

接下来,我们就逐一举行进修。

经由过程元素的 ID 属性值定位元素

HTML 页面元素的 id 属性的特性是唯一、不可反复的,所以经由过程这类体式格局定位的 HTML 页面元素也是唯一的。

其语法花样以下:

element = document.getElementById(id);

在上述语法中,id 是参数,示意所要定位元素的 id 属性值,是一个大小写敏感的字符串。element 是返回值,示意定位的元素,是一个 Element 对象。

值得注意的是: 假如 HTML 页面中不存在具有该 id 属性值的元素,则返回 null。

下面是运用 getElementById() 要领的示例代码:

var btn = document.getElementById('btn');
// 猎取定位元素的 class 属性值
var className = btn.className;
// 增加 animate 动画款式
className += ' animate';
// 将新的 class 属性值设置
btn.className = className;

上述代码经由过程 getElementById() 要领定位 HTML 页面中 id 属性值为 btn 的元素,并为其元素的 class 属性增加 animate 款式。

完全示例代码请点击右侧的链接: getElementById()要领完全示例代码

经由过程元素的 name 属性值定位元素

其语法花样以下:

elements = document.getElementsByName(name);

在上述语法中,name 是参数,示意所要定位元素的 name 属性值,是一个大小写敏感的字符串。elements 是返回值,示意定位元素的鸠合,是一个 NodeList 鸠合。

下面是运用 getElementsByName() 要领的示例代码:

var elems = document.getElementsByName('btn');
// 轮回遍历一切元素
for (var i=0; i<elems.length; i++) {
    var elem = elems[i]; 
    var className = elem.className; 
    className += ' animate'; 
    elem.className = className;
}

上述代码经由过程 getElementsByName() 要领定位 HTML 页面中 name 属性值为 btn 的元素,并遍历一切获得的元素,为其元素的 class 属性增加 animate 款式。

完全示例代码请点击右侧的链接: getElementsByName()要领完全示例代码

经由过程元素的元素名定位元素

其语法花样以下:

elements = document.getElementsByTagName(name);

在上述语法中,name 是参数,示意所要定位元素的元素名,标记”*”示意一切元素。elements 是返回值,示意定位元素的鸠合,是一个 NodeList 鸠合。

下面是运用 getElementsByTagName() 要领的示例代码:

var elems = document.getElementsByTagName('button');
// 轮回遍历一切元素
for (var i=0; i<elems.length; i++) {
    var elem = elems[i]; 
    var className = elem.className; 
    className += ' animate'; 
    elem.className = className;
}

上述代码经由过程 getElementsByTagName() 要领定位 HTML 页面中元素名为 button 的元素,并遍历一切获得的元素,为其元素的 class 属性增加 animate 款式。

完全示例代码请点击右侧的链接: getElementsByTagName()要领完全示例代码

经由过程元素的 class 属性值定位元素

其语法花样以下:

elements = document.getElementsByClassName(names);

在上述语法中,names 是参数,示意所要定位元素的 class 属性值列表,class 称号经由过程空格分开。

值得注意的是: names 参数可所以一个款式属性称号,也可所以多个款式属性称号。

elements 是返回值,示意定位元素的鸠合,是一个 NodeList 鸠合。

下面是运用 getElementsByClassName() 要领的示例代码:

var elems = document.getElementsByClassName('btn');
// 轮回遍历一切元素
for (var i=0; i<elems.length; i++) {
    var elem = elems[i]; 
    var className = elem.className; 
    className += ' animate'; 
    elem.className = className;
}

上述代码经由过程 getElementsByClassName() 要领定位 HTML 页面中 class 属性值为 btn 的元素,并遍历一切获得的元素,为其元素的 class 属性增加 animate 款式。

完全示例代码请点击右侧的链接: getElementsByClassName()要领完全示例代码

兼容 IE 8 及之前版本的浏览器

getElementsByClassName() 要领只支撑 IE 9 版本及以后版本的浏览器。也就是说,该要领并不支撑 IE 8 及之前版本的浏览器。

下图是差别浏览器的差别版本对 getElementsByClassName() 要领的支撑状况:

《【EASYDOM系列教程】之定位页面元素》

因为国内的临盆环境中,照旧存在运用 IE 8 及之前版本浏览器的状况。所以,我们须要自定义 getElementsByClassName() 要领处理浏览器的兼容问题。

function getElementsByClassName(element, names) {

}

上述自定义兼容要领接收两个参数,element 参数示意挪用 getElementsByClassName() 要领的对象(现在为 Document 对象),names 参数示意所要定位元素的 class 属性值列表。

function getElementsByClassName(element, names) {
    // 检测 getElementsByClassName() 是不是可用
    if (element.getElementsByClassName) {
        // 优先运用 W3C 范例
        return element.getElementsByClassName(names);
    }else {
        // 工资处理 IE 8 之前版本不兼容问题

    }
}

这里我们要优先运用 W3C 范例的要领。所以,须要先推断当前浏览器环境是不是存在 getElementsByClassName() 要领。

假如存在,就运用底本的 getElementsByClassName() 要领。假如不存在,就运用自定义代码来完成。

function getElementsByClassName(element, names) {
    // 检测 getElementsByClassName() 是不是可用
    if (element.getElementsByClassName) {
        // 优先运用 W3C 范例
        return element.getElementsByClassName(names);
    }else {
        // 工资处理 IE 8 之前版本不兼容问题
        
        // 猎取一切子女元素节点
        var elements = element.getElementsByTagName('*');
        // 定义空数组
        var result = [];
        var element, classNameStr, flag;
        // 将款式称号改成数组范例
        names = names.split(' ');
        // 轮回遍历一切元素节点
        for (var i=0; element = elements[i]; i++) {
              // 猎取每一个元素节点的款式称号
            classNameStr = ' ' + element.className + ' ';
            // 开启开关
            flag = true; 
            // 轮回遍历一切的款式称号
            for (var j=0, name; name = names[j]; j++) {
                // 推断当前元素节点的款式称号中是不是包括指定的款式称号
                if (classNameStr.indexOf(' ' + name + ' ') == -1){
                    // 假如不包括,则封闭开关,而且完毕轮回
                    flag = false;
                    break;
                }
            } 
            // 推断当前元素节点是不是包括指定款式称号
            if (flag) {
                // 假如包括,则将当前元素节点增加到数组中
                result.push(element);
            }
        } 
        // 返回数组(一切包括指定款式称号的元素节点)
        return result;
    }
}

经由过程 CSS 选择器定位元素

CSS 中的选择器能够很方便地定位 HTML 页面元素,DOM 的标准范例中也供应相似的要领。

  • querySelector(): 定位婚配选择器的第一个元素。

  • querySelectorAll(): 定位婚配选择器的一切元素。

querySelector() 要领

其语法花样以下:

element = document.querySelector(selectors);

在上述语法中,selectors 是参数,示意选择器,能够包括一个或多个 CSS 选择器,多个则以逗号分开。element 是返回值,示意定位元素的鸠合,婚配的第一个元素。

下面是运用 querySelector() 要领的示例代码:

var btn = document.querySelector(’#btn');
// 猎取定位元素的 class 属性值
var className = btn.className;
// 增加 animate 动画款式
className += ' animate';
// 将新的 class 属性值设置
btn.className = className;

上述代码经由过程 querySelector() 要领定位 HTML 页面中 id 属性值为 btn 的元素,并为其元素的 class 属性增加 animate 款式。

完全示例代码请点击右侧的链接: querySelector()要领完全示例代码

querySelectorAll() 要领

其语法花样以下:

elements = document.querySelectorAll(selectors);

在上述语法中,selectors 是参数,示意选择器,能够包括一个或多个 CSS 选择器,多个则以逗号分开。elements 是返回值,示意定位元素的鸠合,是一个 NodeList 鸠合。

下面是运用 querySelectorAll() 要领的示例代码:

var elems = document.querySelectorAll('button');
// 轮回遍历一切元素
for (var i=0; i<elems.length; i++) {
    var elem = elems[i]; 
    var className = elem.className; 
    className += ' animate'; 
    elem.className = className;
}

上述代码经由过程 querySelectorAll() 要领定位 HTML 页面中元素名为 button 的元素,并遍历一切获得的元素,为其元素的 class 属性增加 animate 款式。

完全示例代码请点击右侧的链接: querySelectorAll()要领完全示例代码

节点鸠合 NodeList

NodeList 是一组元素节点的鸠合,每一个节点具有响应的索引值(从 0 最先的数字,相似于数组)。

元素节点在 NodeList 鸠合中存储的递次与它们在 HTML 页面中的递次保持一致。

NodeList 的属性 length 示意 NodeList 对象中包括的节点个数。要领 item(index) 示意返回 NodeList 对象中指定索引的节点。假如索引值越界,则返回 null。

NodeList 鸠合分为两种: 动态 NodeList 和静态 NodeList。

动态的 NodeList 鸠合

所谓动态的 NodeList 鸠合,就是假如文档中的节点树发生变化,则已存在的 NodeList 对象也可能会变化。

以下几种定位 HTML 页面元素的要领返回的都是动态的 NodeList 鸠合。

  • getElementsByName()要领:经由过程页面元素的 name 属性值定位元素。

  • getElementsByTagName()要领:经由过程页面元素的元素名定位元素。

  • getElementsByClassName()要领:经由过程页面元素的 class 属性值定位元素。

我们能够经由过程以下示例代码,体验动态 NodeList 鸠合的特性:

var elems = document.getElementsByTagName('button');
console.log(elems.length);// 输出 3

// 增加一个新的button按钮
var btn = document.createElement('button');
btn.setAttribute('class','button');
var text = document.createTextNode('New Button');
btn.appendChild(text);

var div = document.getElementsByClassName('button-group')[0];
div.appendChild(btn);

console.log(elems.length);// 输出 4

上述代码经由过程 getElementsByTagName() 要领定位 HTML 页面中一切的 button 元素,测试打印 button 元素的个数是 3 个。

然后,我们建立一个新的 button 元素,而且将其增加到 HTML 页面中,再测试打印 button 元素的个数是 4 个。

值得注意的是: 我们在第二次测试打印 button 元素的个数时,并没有从新定位 HTML 页面中的 button 元素。

完全示例代码请点击右侧的链接: 动态 NodeList 鸠合完全示例代码

静态 NodeList 鸠合

所谓静态 NodeList 鸠合,就是对文档对象模子的任何修正都不会影响鸠合的内容。

querySelectorAll() 要领定位 HTML 页面元素所返回的 NodeList 鸠合就是静态 NodeList 鸠合。

我们能够经由过程以下示例代码,体验静态 NodeList 鸠合的特性:

var elems = document.querySelectorAll('button');
console.log(elems.length);// 输出 3

// 增加一个新的button按钮
var btn = document.createElement('button');
btn.setAttribute('class','button');
var text = document.createTextNode('New Button');
btn.appendChild(text);

var div = document.getElementsByClassName('button-group')[0];
div.appendChild(btn);

console.log(elems.length);// 输出 3

上述代码经由过程 querySelectorAll() 要领定位 HTML 页面中一切的 button 元素,测试打印 button 元素的个数是 3 个。

然后,我们建立一个新的 button 元素,而且将其增加到 HTML 页面中,再测试打印 button 元素的个数照旧是 3 个。

完全示例代码请点击右侧的链接: 静态 NodeList 鸠合完全示例代码

定位页面元素属性

Document 对象也供应了一些属性,来定位 HTML 页面中一些比较特别的元素。

  • documentElement:猎取 HTML 页面中的 <html> 元素。

  • head:猎取 HTML 页面中的 <head> 元素。

  • title:猎取 HTML 页面中的 <title> 元素。

  • body:猎取 HTML 页面中的 <body> 元素。

  • links:猎取 HTML 页面中的一切 <a> 元素。

  • images:猎取 HTML 页面中的一切 <img> 元素。

我们能够定义一个包括以上元素的 HTML 页面,然后经由过程以下示例代码举行测试:

console.log(document.documentElement);
console.log(document.head);
console.log(document.body);
console.log(document.title);
console.log(document.links);
console.log(document.images);

本教程免费开源,任何人都能够免费进修、分享,以至能够举行修正。但须要说明作者及泉源,而且不能用于贸易。

本教程采纳学问同享签名-非贸易性运用-制止归纳 4.0 国际允许协定举行允许。

《【EASYDOM系列教程】之定位页面元素》

    原文作者:二月红
    原文地址: https://segmentfault.com/a/1190000010209673
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞