使用getElementsByTagName选择所有div

时间:2013-04-04 01:21:18

标签: javascript

我正在开发一个项目,我只能使用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

2 个答案:

答案 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代替

DEMO

答案 1 :(得分:2)

你不能像这样使用.addEventLister() - 必须逐个元素地调用它。

for (var i = 0; i < divs.length; ++i)
  divs[i].addEventListener(...);

或者,您可以向<body>元素添加单个事件侦听器,并捕获从<div>元素冒出的事件。