`

javaScript中getElementByClassName的实现

阅读更多
<style>
	body{
		margin:0px;
		padding:0px;
		}
	#div1{
		width:300px;
		height:200px;
		background:#CC3;
		margin:30px auto 0px 10px;
		position:relative;
		}
	#div2{
		width:300px;
		height:200px;
		background:#096;
		position:absolute;
		left:310px;
	}
	#div11{
		margin-left:10px;
		}	
</style>

</head>
<body>
	<div id='div1' class='div1'>
    	xxxxxx
        <div id='div11' class='div1'>fasdfa</div>
    </div>
	<div id='div2' class='div1'>
    
    </div>
    <div id='div3' class='div1'  style="width:200px">
    	<div id='div31' class='div1'></div>
    </div>

</body>

 

//测试版本 chrome  40.0.2214.115 
//getElementByClassName函数做兼容
//最重要的部分在最后一个测试函数,看懂了也可以不用再看了
window.onload=function(){
		//先来看看本浏览器是否兼容
		console.info(document.getElementsByClassName('div1'));
		console.info(document.getElementById('div1').getElementsByClassName('div1'));
		var oNodes=document.getElementsByTagName('*');
		console.info(oNodes);//HTMLCollection[14]
		for(var i=0;i<oNodes.length;i++){
				console.info(oNodes[i]+' '+oNodes[i].className+' '+i);
				if(oNodes[i].className){
						console.info('calssName:  '+oNodes[i].className);
					}else{
							console.info('calssName: 不存在');
						}
				
			}
			
			
		//进入正题
		//思路
		//先getElementsByTagName('*'),再从中选取符合要求的返回
		//参数两个,第一个限制所选节点的范围,第二要查的元素名称
		
		//测试下正则表达式
		var temp=new RegExp("^|\\s"+"fsdfsa"+"\\s|$","ig")
		console.info(temp);
		console.info(temp.test(  'fSdfsa'  ));
		//和最下面测试的一样,添加到Object的原型上,不然找不到方法
		function getFilter(className){
				//首先判断是否兼容
				if(this.getElementsByClassName){
						this.getElementsByClassName(className);
					}else{	
							var ret=[];
							var oNodes=this.getElementsByTagName('*');
							for(var i=0;i<oNodes.length;i++){
									if(new RegExp("^|\\s"+className+"\\s|$","ig").test(oNodes[i].className)){
											ret.push(oNodes[i]);
										}
								}
							return ret;
						}
				
			}
		//单独拿出测测
		
		/*function getFilter1(className){
				var ret=[];
				var oNodes=this.getElementsByTagName('*');
				for(var i=0;i<oNodes.length;i++){
						if(new RegExp("^|\\s"+className+"\\s|$","ig").test(oNodes[i].className)){
								ret.push(oNodes[i]);
							}
					}
				return ret;
			}*/
		//简单实用的getElementsByTagName方法就实现了
		 Object.prototype.getFilter1=function(className){
				var ret=[];
				var oNodes=this.getElementsByTagName('*');
				for(var i=0;i<oNodes.length;i++){
						if(new RegExp("^|\\s"+className+"\\s|$","ig").test(oNodes[i].className)){
								ret.push(oNodes[i]);
							}
					}
				return ret;
			};
		 console.info(document.getElementById('div1').getFilter1('div1'));//结果就对了
	};

 //至此结束

分享到:
评论

相关推荐

    Obj_ADS.rar_javascript

    在JavaScript中,GUI动画通常是通过操纵DOM元素的样式属性,如位置、透明度或尺寸来实现的。这些变化可以通过时间间隔或事件触发,创建出动态视觉效果。JavaScript的动画实现可以使用原生API,如`...

    Javascript显示和隐藏ul列表的方法

    首先,要实现ul列表的显示和隐藏,我们通常会使用JavaScript中的DOM操作方法。DOM(文档对象模型)是W3C组织制定的一套标准,允许程序和脚本动态访问和更新文档内容、结构和样式。在这其中,我们可以通过document....

    Java Script 计时器和bom对象.pdf

    JavaScript是Web开发中不可或缺的一部分,尤其在前端领域,它提供了丰富的功能来操作页面和与用户交互。本篇文档主要探讨了JavaScript中的计时器和浏览器对象模型(BOM)的相关概念,通过实例代码来深入理解这些知识...

    javascript学习(一)构建自己的JS库

    通过这些函数的实现,我们可以学习到如何封装自己的JavaScript库,如何组织代码以及如何使用一些JavaScript的核心特性,如正则表达式、数组操作和函数式编程。此外,这个简单的例子也展示了如何将多个函数组织在一起...

    api_DHTML_CN

    在DHTML中,CSS允许我们实现元素的动态动画和位置变化。 3. **JavaScript**:这是一种解释型的、跨平台的脚本语言,广泛用于网页的客户端编程。JavaScript可以操作DOM,响应用户事件,实现动态效果和页面逻辑。 4....

    recursion:基于递归的填充

    该项目旨在探索递归的使用,同时重新实现以下本机javascript和DOM方法polyfill: getElementByClassName() parseJSON() stringifyJSON() 某些代码可能是用ES6编写的,可能需要进行编译才能进行测试。 ...

    waterbrowser-chrome-ext:Chrome扩展程序可替换之间的所有内容带有不同图片的水杯的标签

    在这个项目中,JavaScript被用来检测网页中的水杯图像,并实现图像的实时替换。通过操作DOM(Document Object Model)——HTML和XML文档的结构化表示,JavaScript可以找到网页上的特定元素,然后进行修改,比如将...

    codeup-web-exercises

    熟悉selectElementById、getElementByClassName等方法对于实现网页交互至关重要。 3. **事件处理**:JavaScript通过事件监听来响应用户的交互行为,如点击按钮、滚动页面等。学会addEventListener和...

    webbananoudep

    2. **DOM操作**:JavaScript可以操纵HTML元素,添加、删除或修改DOM节点,通过`document.getElementById`、`querySelector`、`getElementByClassName`等方法获取元素,使用`innerHTML`、`innerText`、`style`属性...

    aceshooting.github.io:星星的全景

    【aceshooting.github.io:星星的全景】是一个项目,它展示了卢森堡的星空全景,主要基于JavaScript技术实现。这个项目可能是一个互动的天文体验,让用户能够浏览和探索卢森堡夜晚的美丽星空。JavaScript是一种广泛...

    107个JS常用语句

    JavaScript,简称JS,是Web开发中的重要脚本语言,它主要负责网页的动态效果和交互。这107个常用语句涵盖了JS的基础语法、控制结构、数据类型、函数、对象、DOM操作等多个方面,旨在帮助开发者提升工作效率并增强对...

    ,jQuery 进阶学习.pptx )

    - **类选择器**:如`$(".className")`,在不同的浏览器中性能表现不一,取决于浏览器是否支持特定的原生方法(如`getElementByClassName`)。 - **伪类和属性选择器**:这类选择器的性能依赖于浏览器是否提供了相应...

    movie-app

    接下来,我们将深入探讨JavaScript在构建此类应用中的关键知识点。 **JavaScript基础** JavaScript是一种广泛应用于Web开发的编程语言,它允许在浏览器端执行代码,提供动态交互性。在"movie-app"中,JavaScript...

    ew-color-picker:一个基于原生js实现的颜色选择器

    或 var color = new ewColorPicker(document.getElementByClassName('demo')); //点击确定 color.config.sure = function(color){ //返回颜色值 } //点击取消 color.config.clear = function(d

    fin67-h.github.io

    1. DOM操作:通过JavaScript获取、修改和操作HTML元素,如document.getElementById、querySelector、getElementByClassName等方法。 2. 事件处理:如addEventListener绑定事件监听器,以及onclick、onmouseover等...

    personal_website

    - `getElementByClassName()`和`getElementsByTagName()`:按类名或标签名获取元素。 3. **AJAX(异步JavaScript和XML)** - 实现页面局部更新,提高用户体验。 总结来说,"personal_website"项目涉及到了HTML的...

    jQuery代码优化方法总结

    相反,class选择器(如`$('.className')`)在某些浏览器中可能相对较慢,尤其是IE5-IE8,因为它们没有`getElementByClassName`的原生支持。最慢的选择器是伪类选择器(如`':hidden'`)和属性选择器(如`'[attribute=...

Global site tag (gtag.js) - Google Analytics