最近刚从前一家公司离职,所在公司属于外包公司,一切开发追求速度,类库用的比较多,以至于好多原生js,有些遗忘,也借此机会回顾一下。
废话不多说直接开始吧!
一、DOM操作之节点获取
1.通过节点的ID
document.getElementById(eleId);
该方法通过节点的ID,可以准确获得需要的元素,是比较简单快捷的方法。如果页面上含有多个相同id的节点,那么只返回第一个节点。
2.通过节点的name
document.getElementsByName(eleName);
该方法是通过节点的name获取节点,从名字可以看出,这个方法返回的不是一个节点元素,而是具有同样名称的节点数组。然后,我们可以通过循环判断是否为需要的节点。
3.通过节点的Tag
document.getElementsByTagName(tagName);
该方法是通过节点的Tag获取节点,同样该方法也是返回一个数组,例如:document.getElementsByTagName('A')将会返回页面上所有超链接节点。
4.通过节点的className
document.getElementsByClassName(className);
该方法是通过节点的className获取节点,同样该方法也是返回一个数组,例如:document.getElementsByClassName('red')将会返回页面上所有class属性包含red的节点集合。
5.通过css选择器
document.querySelector("#demo"); //返回ID为demo的节点document.querySelector("input[type='tel']"); //返回type为tel的input表单元素document.querySelector(".contaniner > .headimg"); //返回class含有contaniner下的class含有headimg的元素
该方法更加匹配了我们对css选择器使用的习惯,通过选择器更加精准高效获取指定元素,querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素。如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代。
6.通过element属性
parentObj.firstChild;
该属性返回parentObj的第一个子节点。这个属性是可以递归使用的,也就是支持parentObj.firstChild.firstChild.firstChild...的形式,如此就可以获得更深层次的节点。
parentObj.lastChild;
该属性是返回parentObj的最后一个子节点。与firstChild一样,它也可以递归使用。
parentObj.childNodes;
该属性返回已知节点的子节点数组,然后可以通过循环或者索引找到需要的节点。
element.previousSibling
返回已知节点element的前一个节点,这个属性和前面的firstChild、lastChild一样都可以递归使用的。
element.nextSibling
返回已知节点element的后一个节点,同样支持递归。
childNode.parentNode
获取已知节点的父节点。
二、DOM操作之节点获取注意事项
1.经测试发现,childNodes在IE7上获取的是直接子节点的数组,而在Firefox2.0.0.11上获取的是所有子节点即包括子节点的子节点。
2.IE8及以下浏览器不支持 getElementsByClassName();
3.IE9及以下浏览器只支持在表单元素上使用 getElementsByName() 方法
4.IE9及以下浏览器中使用 getElementsByName() 方法也会返回id属性匹配的元素。因此,不要将 name 和 id 属性设置为相同的值。
5.querySelectorAll() 方法得到的类数组对象是非动态实时的,所以如果要计算长度等的实事值,最好重新获取;当然以前的 getElementById() 之类的就没这个毛病;
6.动态集合不需要将所有的信息放在前面,而.querySelectorAll()会立即收集静态列表中的所有信息,从而使其性能更差。
7. querySelectorAll()我们不能在结果上调用Node方法。
8.querySelectorAll()返回是一个节点列表,而不是一个数组。这意味着普通的数组方法不可直接使用。
三、尝试封装类jquery方法
$("selector")的实现
//类库 function JQ(ele) { this.ele = ele; } //添加实例方法 JQ.prototype.html = function(){ ...... } ......//处理获取节点,并返回对象实例 function $(selector){ if ( selector ) { var ele = document.querySelectorAll(selector); return new JQ(ele); } return null; }
当然以上实现仅仅只是一个逻辑结构上的实现,具体的复杂情况请移步到jquery在github上的init源码