常见的原始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 相关文章推荐
ie和firefox不兼容的解决方法集合
Apr 28 Javascript
COM中获取JavaScript数组大小的代码
Nov 22 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
JavaScript中消除闭包的一般方法介绍
Mar 16 Javascript
JS实现控制表格单元格垂直对齐的方法
Mar 30 Javascript
js实现可折叠展开的手风琴菜单效果
Sep 07 Javascript
js实现无缝滚动特效
Dec 20 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
深入理解 Koa 框架中间件原理
Oct 18 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
Apr 25 Javascript
微信小程序实现带放大效果的轮播图
May 26 Javascript
微信小程序中的列表切换功能实例代码详解
Jun 09 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
大师制作的中短波矿石收音机
2020/04/02 无线电
DSP接收机前端设想
2021/03/02 无线电
php microtime获取浮点的时间戳
2010/02/21 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
重载toString实现JS HashMap分析
2011/03/13 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
2015/01/19 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
vue组件学习教程
2017/09/09 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
python使用pycharm环境调用opencv库
2018/02/11 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
django将数组传递给前台模板的方法
2019/08/06 Python
基于python操作ES实例详解
2019/11/16 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
门卫岗位职责
2015/02/09 职场文书
python字符串常规操作大全
2021/05/02 Python