常见的原始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 相关文章推荐
分享别人写的一个小型js框架
Aug 13 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
Sep 05 Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 Javascript
JavaScript学习笔记之数组求和方法
Mar 23 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
从零开始做一个pagination分页组件
Mar 15 Javascript
详解AngularJS之$window窗口对象
Jan 17 Javascript
VUE2.0中Jsonp的使用方法
May 22 Javascript
小程序实现发表评论功能
Jul 06 Javascript
微信小程序性能优化之checkSession的使用
Mar 06 Javascript
微信小程序实现同时上传多张图片
Feb 03 Javascript
vue微信分享插件使用方法详解
Feb 18 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
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
js获取class的所有元素
2013/03/28 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
python访问sqlserver示例
2014/02/10 Python
python根据日期返回星期几的方法
2015/07/06 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
python变量不能以数字打头详解
2016/07/06 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
python时间日期操作方法实例小结
2020/02/06 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
python爬虫实现获取下一页代码
2020/03/13 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
计算机专业个人求职信范例
2013/09/23 职场文书
教学质量评估实施方案
2014/03/17 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
民主生活会主持词
2015/07/01 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
MySQL系列之十二 备份与恢复
2021/07/02 MySQL