您可以尝试 Derek 的回答,但您很快就会发现IE8 在 quirks 模式或 IE 7 及更低版本中不支持querySelector ,并且 IE 8 及更低版本根本不支持addEventListener。
纯 js 的选择包括编写自己的getElementsByClassname函数(不是特别困难)或使用事件委托,以便为每个事件仅附加一个侦听器,并且需要一个简单的hasClass函数。
无论如何,这里有一个例子:
任何 javscripter 都应该在库中拥有或能够在几分钟内编写代码的一些标准库函数:
// Minimalist addEvent function, ok for the current web
function addEvent(el, fn, evt) {
if (el.addEventListener) {
el.addEventListener(evt, fn, false)
} else if (el.attachEvent) {
el.attachEvent('on' + evt, fn);
}
}
// Returns true or false depending on whether element el has class classname
function hasClassname(el, classname) {
var re = new RegExp('(^|\\s)' + classname + '(\\s|$)');
return re.test(el.className);
}
完成这项工作的功能:
// Toggle the id. Note that this deals with the case where
// the element to toggle isn't found to prevent errors being thrown
function toggleId(e) {
e = e || window.event;
var el = e.target || e.srcElement;
var o;
if (hasClassname(el, 'tomouseover')) {
if (e.type == 'mouseover') {
o = document.getElementById('set1');
if (o) o.id = 'set2';
} else if (e.type == 'mouseout') {
o = document.getElementById('set2');
if (o) o.id = 'set1';
}
}
}
// Attach the listener onload, could also add from a bottom
// script or inline. If inline, use `toggleId(event)`
window.onload = function() {
addEvent(document.body, toggleId, 'mouseover');
addEvent(document.body, toggleId, 'mouseout');
}
以上将适用于所有浏览器回到 IE6 和 NN 3 左右,并将继续适用于 W3C 或 IE 事件模型的未来浏览器。