【发布时间】: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