常见的原始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 相关文章推荐
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 Javascript
javascript 判断中文字符长度的函数代码
Aug 27 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
JavaScript判断DIV内容是否为空的方法
Jan 29 Javascript
js获取Html元素的实际宽度高度的方法
May 19 Javascript
如何使用headjs来管理和异步加载js
Nov 29 Javascript
js以及jquery实现手风琴效果
Apr 17 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
Aug 25 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
Apr 01 Javascript
Express结合Webpack的全栈自动刷新
May 23 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
Sep 05 Javascript
Vue快速实现通用表单验证功能
Dec 05 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
linux实现php定时执行cron任务详解
2013/12/24 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
javascript常见用法总结
2014/05/22 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python实现多人聊天室
2020/03/31 Python
对python 调用类属性的方法详解
2019/07/02 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
文明家庭先进事迹材料
2014/05/14 职场文书
简单租房协议书范本
2014/08/20 职场文书
2015年党总支工作总结
2015/05/25 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL