常见的原始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 相关文章推荐
利用jquery的获取JS文件中的字符串内容
Feb 14 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
Jun 05 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
Oct 17 Javascript
js中for in语句的用法讲解
Apr 24 Javascript
关于不同页面之间实现参数传递的几种方式讨论
Feb 13 Javascript
js控制按钮,防止频繁点击响应的实例
Feb 15 Javascript
javascript中apply/call和bind的使用
Feb 15 Javascript
Vue组件通信实践记录(推荐)
Aug 15 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
Aug 31 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 Javascript
基于原生JS封装的Modal对话框插件的示例代码
Sep 09 Javascript
vue-router路由懒加载及实现的3种方式
Feb 28 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
php返回json数据函数实例
2014/10/09 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
JavaScript延迟加载
2021/03/09 Javascript
JS 显示当前日期与时间的代码
2010/03/24 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
Python3实现连接SQLite数据库的方法
2014/08/23 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
简单实现python画圆功能
2018/01/25 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
给实习单位的感谢信
2014/02/01 职场文书
亮化工程实施方案
2014/03/17 职场文书
质量承诺书格式
2014/05/20 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
店铺转让协议书
2014/12/02 职场文书
2015年简历自我评价范文
2015/03/11 职场文书