如何让javascript支持getElementsByClassName

我们知道,在javascript中有几种DOM方法可以获取元素的节点,常用的有getElementById,getElementsByName,getElementsByTagName。但是我们在写页面时,用的最多的还是class,而javascript中缺没有getElementsByClassName方法,很让人纠结(在html5中已经可以使用该方法)。

下面我们就通过已有的DOM方法来写个getElementsByClassName方法,话不多说先附上代码:
function getElementsByClassName(classname) {
	var results = new Array();
	var elems = document.getElementsByTagName("*");
	for(var i = 0; i<elems.length; i++) {
		if(elems[i].className.indexOf(classname) != -1) {
			results[results.length] = elems[i];
		}
	}
	return results;
}
代码解析:
function getElementsByClassName(classname) {
	//代码
}
我们先建立一个函数getElementsByClassName并传递一个参数classname,而这个classname就是我们所希望得到的类。
var results = new Array();
通过类获取到的元素可能有一个,也可能有多个,所以它和getElementsByTagName一样,返回的是一个对象数组。
var elems = document.getElementsByTagName("*");
我们知道,类都是应用在html标签上,如 div,p,ul,li等,所以我们要获取到整个文档下的所有html标签,把它们赋给elems这个数组。
for(var i = 0; i<elems.length; i++) {
	if(elems[i].className.indexOf(classname) != -1) {
		results[results.length] = elems[i];
	}
}
遍历elems数组,判断数组中的标签类名是否是我们需要的(classname),如果是我们需要的,就把它赋给前面所建立的results数组。
return results
把results数组返回给getElementsByClassName函数。
最后我要说明下,想要获取类节点的方法有很多,我的方法并不是最好的,比如它不支持获取多个类。
最后的最后,我刚刚开始学习javascript,是个新手,如果哪里有不对的地方,欢迎大牛指导。 微笑

PS:博客搬家了,以后不再 CSDN 更新了,见谅。最新博客地址: http://www.cnblogs.com/yjzhu/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: getElementsByClassName失效可能是由于以下原因: 1. 该类名不存在于文档中。 2. 该类名存在于文档中,但是它的大小写与代码中不匹配。 3. 该类名存在于文档中,但是它被动态地修改或删除了。 4. 该类名存在于文档中,但是它被包含在一个iframe或者frame中,而且该iframe或者frame的源与当前页面的源不同,导致跨域问题。 解决方法: 1. 确认该类名是否存在于文档中,大小写是否匹配。 2. 如果该类名被动态地修改或删除了,可以尝试重新获取该元素或者重新加载页面。 3. 如果该类名被包含在一个iframe或者frame中,可以尝试使用window.parent.document.getElementsByClassName来获取该元素。 4. 如果是跨域问题,可以尝试使用postMessage或者jsonp等跨域解决方案。 ### 回答2: getElementsByClassName 是一个用于获取指定类名的元素集合的方法,但它有时会失效的原因可能有以下几种情况: 1. 类名错误:如果指定的类名不存在或输入错误,那么该方法无法找到匹配的元素。因此,在使用 getElementsByClassName 时要确保类名的准确性和存在性。 2. 文档加载未完成:如果尝试在文档加载完成之前使用 getElementsByClassName,那么该方法可能无法找到所需的元素。为避免这种情况,我们可以将代码放在文档加载完成的事件监听器中,或者将代码放在 </body> 标签之前。 3. 浏览器兼容性:不同的浏览器对 getElementsByClassName支持程度可能有所不同。在一些较旧的浏览器中可能无法正常工作,这时我们可以考虑使用其他方法或者库来实现相同的功能,例如 querySelectorAll。 4. 动态添加的元素:如果我们在页面加载完成后动态添加了带有指定类名的元素,那么 getElementsByClassName 无法找到这些新添加的元素。解决这个问题的方法是使用事件委托,将事件绑定到这些元素的父级元素上。 综上所述,当 getElementsByClassName 失效时,我们需要检查类名的准确性和存在性,确保在文档加载完成后使用该方法,并检查浏览器的兼容性。如果问题仍然存在,我们可以考虑使用其他方法或者库来获取所需的元素。 ### 回答3: getElementsByClassNameJavaScript中的一个方法,用于通过类名获取HTML元素集合。当这个方法失效时,可能有以下几个原因: 1. 类名书写错误:getElementsByClassName方法需要传入一个字符串参数作为类名。如果类名错误,或者没有相应的HTML元素使用了这个类名,方法将无法找到对应的元素。 2. 兼容性问题:getElementsByClassName方法在不同的浏览器中有不同的兼容性。旧版本的IE浏览器可能不支持这个方法,或者有一些差异。在这种情况下,可以考虑使用其他的方法来获取元素,例如getElementById或者querySelectorAll。 3. DOM未完全加载:如果在DOM还没有完全加载完成的时候调用getElementsByClassName方法,可能会出现失效的情况。可以通过在window.onload事件中调用这个方法来确保DOM已经完全加载。 4. 动态添加的元素:如果需要获取的元素是通过JavaScript动态添加到页面中的,可能需要等待元素添加完成再进行获取。可以使用定时器或者MutationObserver来监测元素的添加。 综上所述,当getElementsByClassName方法失效时,可以检查类名是否正确,兼容性是否问题,DOM是否完全加载,以及是否需要等待动态元素添加完成。通过排查这些问题,通常可以解决getElementsByClassName失效的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值