【问题标题】:Change css class for all elements with said class with Javascript使用 Javascript 更改具有所述类的所有元素的 css 类
【发布时间】:2012-09-30 01:09:18
【问题描述】:

基本上,我试图找到具有特定类名的所有元素并将其切换到另一个。我有另一个函数可以将其切换回原始类名。这是我通过 onclick 触发的函数:

function showEventsAppliedTo() {
    var myObj = document.getElementsByClassName('notApplied');
    while (myObj.length >= 0) {
        myObj[0].className = 'mblListItem notAppliedOut';
    }
    AppliedToButton.set('style', 'display:none;');
    EventListingButton.set('style', 'display:block;');
}

我收到一条错误消息,提示 myObj[0] 未定义。知道为什么会这样吗?

请注意,我们使用的是 Dojo,因此是函数的最后一行。我知道我可以使用 jQuery 轻松做到这一点,但我们没有使用它,加载另一个框架没有意义。

提前感谢您的帮助。

编辑

感谢 Abhishek Mishra 的帮助,我修改了处理此循环的方式,并找到了一种使用 JUST dojo 的方法,这是我的首选。代码如下:

function listingClassToggle() {
    dojo.query(".notApplied").addClass("notAppliedOut");
    dojo.query(".notApplied").removeClass("notApplied");
}

比我之前的解决方案更简单的代码和更轻量级的解决方案。感谢你的帮助。我希望这对其他人有帮助。

【问题讨论】:

  • 您也许可以使用 dojo 的 forEach 循环遍历 myObj,然后您就不需要检查零了。 dojotoolkit.org/reference-guide/1.7/dojo/forEach.html 。还有 dojo.query 用于基于 css 的查询,这将是 dojo.query('.notApplied');
  • 我想知道这是否会比我使用的方法运行得更快?下面的答案修复了它,但我也会研究这种方法。该查询方法可能比 getelement 更好
  • 我相信dojo的query会在浏览器之间更兼容。 getElementsByClassName 很好,但在 IE 7 和 8 中不起作用;) caniuse.com/#search=getElementsByClassName
  • 很高兴知道!在这种情况下,现在实现它而不是以后再玩它是有意义的!谢谢。
  • 我听从了你的建议,最终使用了这个 'dojo.query(".notApplied").addClass("notAppliedOut"); dojo.query(".notApplied").removeClass("notApplied");'它工作得很好!我只需切换语句中的类即可将其切换回来。感谢您的帮助!

标签: javascript css class styles dojo


【解决方案1】:

应该只测试> 0 而不是>= 0。当长度为零时,没有元素为零。

【讨论】:

  • 哦,是的,就是这样。 0 表示没有剩余元素! :-) 我在想while (myObj[0]) {...
  • 这可以解释为什么函数看起来一切正常,并在最后抛出错误。做到了,谢谢!
  • 查看我上面的编辑以了解如何仅使用 Dojo 功能而不是运行“while”语句来完成此操作
猜你喜欢
  • 2021-12-10
  • 2018-10-21
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 2018-11-26
相关资源
最近更新 更多