Javascript:getElementsByClassName

背景:

由于原生的getElementsByClassName不支持在指定标签中查找指定元素为指定class的情况,所以,这里舍弃了原生的方法调用

 

方法一:

function getElementByClassName(parent,tagName,className) {

	/*
	*参数说明:
	*@parent:父元素,默认为document
	*@tagName:子元素的标签名
	*@className: 用空格分开的className字符串
	*/

	var aEls=parent.getElementsByTagName(tagName);

	var arr=[];

	for(var i=0;i<aEls.length;i++){

        var aClassName=aEls[i].className.split(‘ ‘);//注意,是用‘ ‘(空格)拆分

        for(var j=0;j<aClassName.length;j++){

        	if(aClassName[j] == className){
        		arr.push(aEls[i]);
        		break;
        	}
        }

	}

	return arr;
}

方法二:

function getElementByClassName(parent,tagName,className) {

	/*
	*参数说明:
	*@parent:父元素,默认为document
	*@tagName:子元素的标签名
	*@className: 用空格分开的className字符串
	*/

	var aEls=parent.getElementsByTagName(tagName);

	var arr=[];

	for(var i=0;i<aEls.length;i++){

	if(aEls[i].classList.contains(className)){
        arr.push(aEls[i]);
	}

	}

	return arr;
}

测试:

<div id="area">
	<p class="p1">1</p>
	<p class="p1">2</p>
	<p class="p2 p3">3</p>
	<p class="p1 p3">4</p>
	<p class="p2 p2">5</p>
</div>

<script type="text/javascript">
var oArea=document.getElementById(‘area‘);
var aP1=getElementByClassName(oArea,‘p‘,‘p1‘);
var aP2=getElementByClassName(oArea,‘p‘,‘p2‘);

console.log(aP1);
console.log(aP2);

</script>

方法一,测试结果:

方法二,测试结果:

了解更多:

1#支持多个class查询和在某个范围内进行查询的getElementsByClassName实现

http://www.cnblogs.com/fool/archive/2010/10/09/1846424.html

2#getElementsByClassName的理想实现

http://www.cnblogs.com/rubylouvre/archive/2009/07/24/1529640.html

时间: 2024-10-27 13:49:40

Javascript:getElementsByClassName的相关文章

[ javascript ] getElementsByClassName与className和getAttribute!

对于javascript中的getElementsByClassName 在IE 6/7/8 不支持问题. 那么需要模拟出getElementsByClassName  需要采用className属性,这里就涉及到javascript中的getAttribute问题. 在ie 6/7 中,对于getAttribute存在Bug 需要采用className 获取如下: var node = document.getElementById("test"); var name = node.

深入理解javascript选择器API系列第二篇——getElementsByClassName

× 目录 [1]使用 [2]classList [3]扩展 前面的话 既然有getElementById()和getElementsByTagName()方法,为什么没有getElementsByClassName()呢?id属性.标签名.class属性并没有什么优劣之分啊.终于,HTML5新增了getElementsByClassName()方法,由于在CSS布局中类名的广泛使用,该方法正好切中痛点,使得通过类名选取元素不再麻烦,成为最欢迎的一个方法.接下来,本文将详细介绍该方法 使用 HTM

javascript中document.getElementsByClassName兼容性封装方法一

var getElmsByClsName = function(className, results) { results = results || []; // 判断浏览器是否支持 getElementsByClassName if(document.getElementsByClassName) { // 浏览器支持这个方法 results.push.apply( results, document.getElementsByClassName(className) ); } else {

【JavaScript兼容】关于IE8及以下无法通过getElementsByClassName()方法获得元素的解决方法

try{ var a = document.getElementsByClassName("cla"); console.log(a); }catch(ex){ var array = []; for(var i = 0;i<document.body.childNodes.length;i++){ if(document.body.childNodes[i].nodeType === 1){ var name = document.body.childNodes[i].clas

javascript中的事件委托

这几天看到一个面试题,大概就是,让你给1000个li都添加一个click事件,应该怎么添加?大多数人第一开始的感觉可能就是,每个li上边都添加一个呗,那要是这样的话,估计面试的时候就会GG了,这里就是撤出了我们的事件冒泡和捕获机制,以及事件委托机制,对于上边这些,我们慢慢来看. 首先说一下事件冒泡和事件捕获机制,事件冒泡是有微软公司提出来的,事件捕获是有网景公司提出来的,当时两家是争论的不可开交,后来w3c也没办法,就采取了折中的方式,事件产生后先捕获后冒泡, 通常,在js中监听事件的方法共有三

JavaScript操作的DOM对象

什么叫DOM? DOM是文档对象模型(Document Object Model,是基于浏览器编程(在本教程中,可以说就是DHTML编程)的一套API接口,W3C出台的推荐标准,每个浏览器都有一些细微的差别,其中以Mozilla的浏览器最与标准接近. DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容. DOM节点树 在HTML中所有的事物都有节点,DOM将HTML文档视作节点树,通过DOM,节点树中的是所有节点都可以通过JavaScript进行访问,所有的HTML元素都可以

javascript操作dom对象

什么叫DOM? DOM是文档对象模型(Document Object Model,是基于浏览器编程(在本教程中,可以说就是DHTML编程)的一套API接口,W3C出台的推荐标准,每个浏览器都有一些细微的差别,其中以Mozilla的浏览器最与标准接近. DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容. 查找元素 1.直接查找 方法名 描述 getElementById(id) (document) 获取有指定惟一ID属性值文档中的元素 getElementsByTagNam

JavaScript笔记03——文档对象模型(Document Object Model,简称DOM)

Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强.[1] DOM实际上是以面向对象方式描述的文档模型.DOM定义了表示和修改文档所需的对象.这些对象的行为和属性以及这些对象之间的关系.可以把DOM认为是页面上数据和结构的一个树形表示,不过页面当然可能并不是以这种树的方式具体实现. 通过 JavaScript,您可以重构整个 HTML 文档.您可以添加.移除.改变或重排页面上的项目. 要改变页面的某个东西,J

JavaScript实用功能代码片段

1.原生JavaScript实现字符串长度截取 1 function cutstr(str, len) { 2 var temp; 3 var icount = 0; 4 var patrn = /[^\x00-\xff]/; 5 var strre = ""; 6 for (var i = 0; i < str.length; i++) { 7 if (icount < len - 1) { 8 temp = str.substr(i, 1); 9 if (patrn.e