常见的原始JS选择器使用方法总结


Posted in Javascript onApril 09, 2014

常见的getElementById,getElementsByName,getElementsByTagName。但外国人不满意这些API,于是搞出了getElementsByClassName,后来一点点又出现了jQuery选择器,这里只说原始js选择。

1.getElementById

这是最常用的选择器,通过id来定位:

例:

var test=document.getElementById("test").value;//获取文档中id为test的元素的值,并赋值给test变脸

2.getElementsByName

例:

var test=document.getElementByName("test");//获取文档中name为test的元素的节点,并赋值给test变量,此时test变量是一个数组

3.getElementsByTagName

例:

var test=document.getElementsByTagName("test");//获取文档中class为test的元素的节点,并赋值给test,此时test变量是一个数组 ,这个选择器在IE5,6,7,8中无法使用

4.getElementsByClassName

这个选择器在js的API中是找不到的,想要使用必须自己定义方法,通常的原理为先使用getElementsByTagName("*")取出文档中所有元素,然后进行遍历,使用正则表达式找出匹配的元素放入一个数组返回。网上有很多程序员实现了这个选择器,下面举两例:

(1)The Ultimate getElementsByClassName方案,作者为Robert Nyman,05年实现,可见老外许多东西在很早以前就走得很远了。

//三个参数都是必需的,查找一网页中5007个类名为“cell”的元素,IE8历时1828 ~ 1844毫秒, 
//IE6为4610 ~ 6109毫秒,FF3.5为46 ~ 48毫秒,opera10为31 ~ 32毫秒,Chrome为23~ 26毫秒, 
//safari4为19 ~ 20毫秒 
function getElementsByClassName(oElm, strTagName, strClassName){ 
var arrElements = (strTagName == "*" && oElm.all)? oElm.all : 
oElm.getElementsByTagName(strTagName); 
var arrReturnElements = new Array(); 
strClassName = strClassName.replace(/\-/g, "\\-"); 
var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)"); 
var oElement; 
for(var i=0; i < arrElements.length; i++){ 
oElement = arrElements[i]; 
if(oRegExp.test(oElement.className)){ 
arrReturnElements.push(oElement); 
} 
} 
return (arrReturnElements) 
}

(2)由Dustin Diaz(《JavaScript Design Patterns》的作者)提供,但兼容性不如上面的,不支持IE5。
//后两参数是可靠的,查找一网页中5007个类名为“cell”的元素,IE8历时78毫秒,IE6历时125~171毫秒 
//FF3.5为42 ~ 48毫秒,opera10为31 毫秒,Chrome为22~ 25毫秒,safari4为18 ~ 19毫秒 
var getElementsByClass = function(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; 
}

--------------------------------------------------------------------------------------------------------------------------------------------------------

注:this可以表示当前元素的节点。

--------------------------------------------------------------------------------------------------------------------------------------------------------

下面是配合事件等知识点的一些常用的使用方法:

//提交id为test的表单 document.getElementById("test").submit(); 
//将id为test元素的边框设置为2个像素,实体,红色 
document.getElementById("test").style.border="2px solid red"; 
//鼠标移动或移出id为test的元素,改变其背景色 
function test(){ 
document.getElementById("test").onmouseover=function(){document.getElementById("test2").style.backgroundColor="red"}; 
document.getElementById("test").onmouseout=function(){document.getElementById("test2").style.backgroundColor="blue"}; 
} 
//弹出文档中name为test的元素的个数 
function test() 

{ 

var test=document.getElementsByName("test"); 

alert(test.length); 

}
Javascript 相关文章推荐
发现的以前不知道的函数
Sep 19 Javascript
关于query Javascript CSS Selector engine
Apr 12 Javascript
JS 数字转换研究总结
Dec 26 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
Sep 28 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
vue+elementUI组件table实现前端分页功能
Nov 15 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 Javascript
jquery查找父元素、子元素(个人经验总结)
Apr 09 #Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 #Javascript
JS、DOM和JQuery之间的关系示例分析
Apr 09 #Javascript
jQuery遍历Table应用示例
Apr 09 #Javascript
通过url查找a元素并点击
Apr 09 #Javascript
js数组方法扩展实现数组统计函数
Apr 09 #Javascript
jquery实现pager控件示例
Apr 09 #Javascript
You might like
javascript工具库代码
2012/03/29 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
javascript类型转换示例
2014/04/29 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
bootstrap table小案例
2016/10/21 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
js实现div色块碰撞
2020/01/16 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
跟老齐学Python之list和str比较
2014/09/20 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
详解Python中dict与set的使用
2015/08/10 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
Python和Sublime整合过程图示
2019/12/25 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
仓库管理专业个人的自我评价
2013/12/30 职场文书
给交警的表扬信
2014/01/12 职场文书
会计工作决心书
2014/03/11 职场文书
建房协议书
2014/04/11 职场文书
文秘应届生求职信
2014/07/05 职场文书
学期个人工作总结
2015/02/13 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书