常见的原始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 相关文章推荐
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
页面装载js及性能分析方法介绍
Mar 21 Javascript
jQuery实现微信长按识别二维码功能
Aug 26 Javascript
强大Vue.js组件浅析
Sep 12 Javascript
jQuery阻止移动端遮罩层后页面滚动
Mar 15 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
bootstrap fileinput插件实现预览上传照片功能
Jan 23 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
vue自定义指令directive的使用方法
Apr 07 Javascript
Javascript三种字符串连接方式及性能比较
May 28 Javascript
Javascript webpack动态import
Apr 19 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
jQuery搜索同辈元素方法
2015/02/10 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
JQuery选择器、过滤器大整理
2015/05/26 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
jquery实现拖动效果
2016/08/10 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
出纳的岗位职责
2013/11/09 职场文书
学校工作推荐信范文
2014/07/11 职场文书
高中社区服务活动报告
2015/02/05 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
怎样写观后感
2015/06/19 职场文书
婚宴来宾致辞
2015/07/28 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android