Javascript getElementsByClassName()不';I don’我不能在像IE6、IE7、IE8这样的老网络探索者中工作
以下代码:Javascript getElementsByClassName()不';I don’我不能在像IE6、IE7、IE8这样的老网络探索者中工作,javascript,internet-explorer-8,internet-explorer-7,internet-explorer-6,dom-traversal,Javascript,Internet Explorer 8,Internet Explorer 7,Internet Explorer 6,Dom Traversal,以下代码: var borderTds = document.getElementsByClassName('leftborder'); 在Internet Explorer 6、7和8中显示错误消息: 对象不支持此方法 如何在这些浏览器中按类选择元素 我不喜欢使用JQuery。该方法在IE6中不存在。如果您想按类选择元素,而不想使用库,只需遍历页面中的所有元素,并在其className属性中检查类 function getElementsByClassName(className) {
var borderTds = document.getElementsByClassName('leftborder');
在Internet Explorer 6、7和8中显示错误消息:
对象不支持此方法
如何在这些浏览器中按类选择元素
我不喜欢使用JQuery。该方法在IE6中不存在。如果您想按类选择元素,而不想使用库,只需遍历页面中的所有元素,并在其
className
属性中检查类
function getElementsByClassName(className) {
var found = [];
var elements = document.getElementsByTagName("*");
for (var i = 0; i < elements.length; i++) {
var names = elements[i].className.split(' ');
for (var j = 0; j < names.length; j++) {
if (names[j] == className) found.push(elements[i]);
}
}
return found;
}
函数getElementsByCassName(类名称){
发现的var=[];
var elements=document.getElementsByTagName(“*”);
对于(var i=0;i
演示:IE6、Netscape 6+、Firefox和Opera 7+在页面中复制以下脚本:
document.getElementsByClassName = function(cl) {
var retnode = [];
var elem = this.getElementsByTagName('*');
for (var i = 0; i < elem.length; i++) {
if((' ' + elem[i].className + ' ').indexOf(' ' + cl + ' ') > -1) retnode.push(elem[i]);
}
return retnode;
};
document.getElementsByClassName=函数(cl){
var retnode=[];
var elem=this.getElementsByTagName('*');
对于(变量i=0;i-1)retnode.push(elem[i]);
}
返回节点;
};
这可能会有所帮助。这是一个用纯javascript实现的自定义函数,在IE中工作
基本上,这个脚本所做的是一个接一个地探测所有可能的选项,并选择可用的最佳选项。这些选择包括:
document.getElementsByClassName
函数document.evaluate
函数,该函数允许计算XPath查询getElementsByClassName("col", "div", document.getElementById("container"));
因此,该函数允许3个参数:类(必需)、标记名(可选,如果未指定,则搜索所有标记)、根元素(可选,如果未指定,则搜索文档)
更新。博客文章中链接的解决方案托管在谷歌代码上,该代码将于2016年1月关闭。然而,作者已经在上提供了它。很荣幸在评论中指出这一点。Internet Explorer 8及更早版本不支持。如果您只需要IE8的解决方案,它支持,您可以使用其中的一个。对于较旧的IE,您必须提供自己的实现,对于其他支持它的古老浏览器,您还可以使用运行XPath表达式的浏览器 使用我描述的方法提供
document.getElementsByCassName
方法(如果该方法尚不存在):
if (!document.getElementsByClassName) {
document.getElementsByClassName = function(search) {
var d = document, elements, pattern, i, results = [];
if (d.querySelectorAll) { // IE8
return d.querySelectorAll("." + search);
}
if (d.evaluate) { // IE6, IE7
pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
elements = d.evaluate(pattern, d, null, 0, null);
while ((i = elements.iterateNext())) {
results.push(i);
}
} else {
elements = d.getElementsByTagName("*");
pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");
for (i = 0; i < elements.length; i++) {
if ( pattern.test(elements[i].className) ) {
results.push(elements[i]);
}
}
}
return results;
}
}
if(!document.getElementsByClassName){
document.getElementsByClassName=函数(搜索){
var d=文档、元素、模式、i、结果=[];
if(d.queryselectoral){//IE8
返回d.querySelectorAll(“.”+搜索);
}
如果(d.evaluate){//IE6,IE7
pattern=“../*[包含(concat(“”,@class'),“+search+”)]”;
元素=d.evaluate(模式,d,null,0,null);
while((i=elements.iterateNext()){
结果:push(i);
}
}否则{
elements=d.getElementsByTagName(“*”);
pattern=newregexp(“(^ |\\s)”+search+“(\\s |$)”;
对于(i=0;i
如果您不喜欢它的某些方面,您可以使用您最喜欢的搜索引擎来查找另一个。如果getElementsByClassname在某些旧浏览器中不支持is错误 试一试 var modal=document.getElementById('myModal'); modal.onclick=function(){ 然后使用getElementById执行任何单击函数或其他函数的操作 modal.style.display=“无”;
}我认为jQuery支持这种功能。使用
jQuery
的另一种选择是只使用。但是,如果您只需要按类选择,那么我只需编写一个替换项。@chaospantion:“我不喜欢使用JQuery”。实际上,使用\b
可能会导致包含-
的类出现问题。最好添加空格:if(“”+elem[i].className+“”).indexOf(“”+cl+“”)>-1).
。这就是jQuery使用的方法。我一直在IE6中工作。似乎IE6没有代码显示的.indexOf()。我必须做一个简单的替换函数:函数indexOf(Arr,Match){var Result=-1;var I;for(I=0;I