当前位置: 首页 > 面试题库 >

getElementsByClassName用于在事件发生时更改元素的样式

谷梁子昂
2023-03-14
问题内容

我正在尝试使用

 onmouseover="document.getElementsByClassName().style.background='color'"

将鼠标悬停在另一个页面元素上时,将具有给定类名的所有div的颜色更改为另一种颜色。

这是一个jsfiddle-如果任何人都可以提供一些有关我哪里出错的有用指针,那将是很棒的,我敢肯定,我确实很想念我。它与document.getElementById一起使用,但是只更改了第一个div的颜色,而不是全部。

谢谢


问题答案:

就像函数名称所暗示的那样,getElementsByClassName返回一个集合,而不仅仅是一个对象。因此,您需要遍历它们并为其应用颜色。

document.getElementsByClassName()
                   ^_______

另外,您的ID部分无效。ID不能有空格,也不应再次出现在页面上,该页面受到以下方面的侵犯:

<th id="colorswitcher A" onmouseover="document.getElementsByClassName('a').style.background='red'">a</th>
<th id="colorswitcher B" onmouseover="document.getElementsByClassName('a').style.background='blue'">b</th>

您可以通过这种方式进行操作(您可以查找什么是处理程序,然后尝试使用它。),不要对处理程序使用内联属性。

window.onload=function(){
    var aColl = document.getElementsByClassName('a'); //Cache the collection here, so that even a new element added with the same class later we can avoid querying this again by using the cached collection.
    var bColl = document.getElementsByClassName('b');

    document.getElementById('A').addEventListener('mouseover', function(){
        changeColor(aColl, 'red');
    });

    document.getElementById('B').addEventListener('mouseover', function(){
        changeColor(bColl, 'blue');
    });
}
function changeColor(coll, color){

    for(var i=0, len=coll.length; i<len; i++)
    {
        coll[i].style["background-color"] = color;
    }
}

如果您确实想在实际工作中使用它,则不要更改style属性,而是定义类并在mouseover,mouseout事件上添加/删除类,以便获得CSS的层叠属性的强大功能。



 类似资料:
  • 问题内容: 是否可以使用或在angular2中更改伪元素的样式? 为了使div上的模糊效果像叠加层一样,我应该在伪元素上设置背景图像。 我尝试了类似的东西 它没有用。我也试过了 问题答案: 不,这不可能。实际上,这不是一个Angular问题:伪元素不是DOM树的一部分,因此不会暴露任何可用于与其交互的DOM API。 如果要以编程方式处理伪元素,通常的方法是间接的:添加/删除/更改类,并在CSS中

  • 问题内容: 我有一个div,其内容可能会以各种方式更改:例如,可以通过innerHTML重新加载其整个内容,或者可以通过DOM方法添加节点。反过来,这可能是通过本地javascript发生的,也可能是通过调用jQuery API或其他库间接发生的。 我希望在div的内容改变为执行一些代码,但我 绝对没有控制 上 如何 将改变。确实,我正在设计一个可供其他人使用的小部件,他们可以自由选择自己喜欢的d

  • 问题内容: 我具有以下功能,当触发该功能时,DIV将变为半透明。 但是,我希望此功能可同时应用于多个DIV。我尝试为每个DIV赋予相同的类名,然后使用,但不知道如何实现它。 会更合适,如果可以的话,我将如何实施呢? 问题答案: 我将使用querySelectorAll选择它们并在它们上循环。 编辑:正如上面的评论所述,如果这些值不是动态的并且使用,则最好将这些值放在类中:

  • 问题内容: 我正在为某个网站编写Greasemonkey脚本,该脚本有时会进行修改。 在页面上进行更改时,如何获取事件(通过或类似方式)?我还需要访问指向新的/修改的URL的文档的DOM。 我看到了其他涉及超时和轮询的解决方案,但如果可能的话,我想避免这种情况。 问题答案: popstate事件: 当活动历史记录条目更改时,将触发popstate事件。[…]popstate事件仅通过执行浏览器操作

  • 问题内容: 我有一个div的特定样式表。现在我想使用js动态修改div的一个属性。 我该怎么做? 它是否正确? 问题答案: 几乎是正确的。 由于是JavaScript操作符,因此您实际上不能在属性名称中使用它。如果您正在设置,或者类似的单字,您的代码就可以正常工作。 但是,对于任何带连字符的属性名称,您都需要记住的是,在javascript中,您删除了连字符,并使下一个字母变为大写,因此应为。 还

  • 我正在寻找一种通过改变散列来改变部分样式的方法。让我以一个例子来解释: > 当前URL为: 然后单击复选框,URL将更改为: 我想更改类的。 我尝试了以下代码,但它不起作用: 实际上,每次哈希更改时,控制台中都不会出现任何内容。