我正在开发一个项目,我只能使用JS来操作HTML文件。我想要更改HTML中所有div的背景颜色,我目前有以下内容。
//Highlight Function
function highlight(e) {
e.target.style.backgroundColor = "orange";
}
function unhighlight(e) {
e.target.style.backgroundColor = "green";
}
function init() {
//Mouseover
var divs = document.getElementsByTagName("div")[0];
divs.addEventListener('mouseover', highlight, false);
divs.addEventListener('mouseout', unhighlight, false);
}
window.addEventListener("load", init, false);
HTML看起来像这样
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
<div id="div4"></div>
显然当前的代码只改变了一个div,如何通过操作JS来选择所有的div
答案 0 :(得分:6)
var elm = document.getElementsByTagName('div');
function highlight() {
this.style.backgroundColor = "orange";
}
function unhighlight() {
this.style.backgroundColor = "green";
}
function init() {
for (var i = 0; i < elm.length; i++) {
if (window.addEventListener) { //Firefox, Chrome, Safari, IE 10
elm[i].addEventListener('mouseover', highlight, false);
elm[i].addEventListener('mouseout', unhighlight, false);
} else if (window.attachEvent) { //IE < 9
elm[i].attachEvent('onmouseover', highlight);
elm[i].attachEvent('onmouseout', unhighlight);
}
}
}
if (window.addEventListener) { //when document is loaded initiate init
document.addEventListener("DOMContentLoaded", init, false);
} else if (window.attachEvent) {
document.attachEvent("onDOMContentLoaded", init);
}
请注意,IE&lt;中不支持addEventListener
9你必须使用attachEvent
代替
答案 1 :(得分:2)
你不能像这样使用.addEventLister()
- 必须逐个元素地调用它。
for (var i = 0; i < divs.length; ++i)
divs[i].addEventListener(...);
或者,您可以向<body>
元素添加单个事件侦听器,并捕获从<div>
元素冒出的事件。