以下代码:
var borderTds = document.getElementsByClassName('leftborder');
在 Internet Explorer 6、7 和 8 中给我一条错误消息:
对象不支持此方法
如何在这些浏览器中按类别选择元素?
我不喜欢使用 JQuery。
以下代码:
var borderTds = document.getElementsByClassName('leftborder');
在 Internet Explorer 6、7 和 8 中给我一条错误消息:
对象不支持此方法
如何在这些浏览器中按类别选择元素?
我不喜欢使用 JQuery。
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;
};
此解决方案可能会有所帮助。这是一个getElementsByClassName
用纯 javascript 实现的自定义函数,可在 IE 中使用。
本质上,这个脚本正在做的是一项一项地探索所有可能的选项,并挑选出最好的一个。这些选项是:
document.getElementsByClassName
功能。document.evaluate
函数,它允许评估 XPath 查询。当然,第一个在性能方面是最好的,但是后者应该在任何地方都可用,包括 IE 6。
页面上也提供了用法示例,如下所示:
getElementsByClassName("col", "div", document.getElementById("container"));
因此该函数允许 3 个参数:类(必需)、标签名称(可选,如果未指定则搜索所有标签)、根元素(可选,如果未指定则为文档)。
更新。博客文章中链接的解决方案托管在 Google Code 上,该代码将于 2016 年 1 月关闭。但是作者已将其提供在GitHub 上。荣誉对弗洛丁指出这一点的意见。
该方法在 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;
}
Internet Explorer 8 及更早版本不支持getElementsByClassName()
. 如果您只需要 IE8 的解决方案,它支持querySelectorAll()
,您可以使用其中之一。对于较旧的 IE,您必须提供自己的实现,对于其他一些支持它的古老浏览器,您还可以使用evaluate()
which 运行 XPath 表达式。
document.getElementsByClassName
如果使用我描述的方法尚不存在,则此代码提供了一种方法:
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;
}
}
如果您不喜欢它的某些方面,您可以使用您最喜欢的搜索引擎来寻找不同的搜索引擎。
如果 getElementsByClassname 不支持在某些旧浏览器中出错只需尝试 var modal = document.getElementById('myModal'); modal.onclick= function(){ 然后使用 getElementById modal.style.display = "none"; }