常见的原始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 相关文章推荐
Jquery中给animation加更多的运作效果实例
Sep 05 Javascript
JS给超链接加确认对话框的方法
Feb 24 Javascript
jQuery中show与hide方法用法示例
Sep 16 Javascript
如何提高数据访问速度
Dec 26 Javascript
基于dataset的使用和图片延时加载的实现方法
Dec 11 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
Jul 31 Javascript
AngularJS 多指令Scope问题的解决
Oct 25 Javascript
Vue开发之封装分页组件与使用示例
Apr 25 Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 Javascript
vue 使用 canvas 实现手写电子签名
Mar 06 Javascript
JavaScript实现猜数字游戏
May 20 Javascript
详解JavaScript之Array.reduce源码解读
Nov 01 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
php上传文件的增强函数
2010/07/21 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
JsonProperty 的使用方法详解
2019/10/11 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
详解python的ORM中Pony用法
2018/02/09 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
详解Python循环作用域与闭包
2019/03/21 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
护理学中专毕业生求职信
2013/11/11 职场文书
后备干部考察材料
2014/02/12 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
留学推荐信怎么写
2015/03/26 职场文书
考研经验交流会策划书
2015/11/02 职场文书
离婚协议书格式范本
2016/03/18 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python
Go语言grpc和protobuf
2022/04/13 Golang
Moment的feature导致线上bug解决分析
2022/09/23 Javascript