常见的原始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 循环读取JSON数据的代码
Jul 17 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
May 13 Javascript
from表单多个按钮提交用onclick跳转不同action
Apr 24 Javascript
Javascript实现计算个人所得税
May 10 Javascript
简述AngularJS相关的一些编程思想
Jun 23 Javascript
JS模式之单例模式基本用法
Jun 30 Javascript
JS拖拽插件实现步骤
Aug 03 Javascript
超实用的JavaScript代码段 附使用方法
May 22 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
Jun 22 Javascript
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
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的十大要点(上)
2009/02/04 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
Python输出9*9乘法表的方法
2015/05/25 Python
详解Django框架中的视图级缓存
2015/07/23 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python函数和模块的使用总结
2019/05/20 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Python3获取cookie常用三种方案
2020/10/05 Python
python破解同事的压缩包密码
2020/10/14 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
外语系毕业生自荐信范文
2013/12/16 职场文书
思想政治教育专业个人求职信范文
2013/12/20 职场文书
给老师的道歉信
2014/01/11 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android