0
事件
可能重复:
Javascript only sets attribute for last item in arrayJavaScript和循环
我刚刚潜入一些基本的JavaScript + DOM学习,不是很明白只有最后一个元素正在切换?我对于为什么附加一个事件到一个元素感到迷失,似乎也覆盖了以前的事件。
的JavaScript:
window.onload = function() {
// Simple log
var c = function(x) {
return console.log(x);
};
var hasClass = function(ele, cls) {
return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
};
var toggleClass = function(ele, cls) {
if (!hasClass(ele, cls)) {
ele.className += " " + cls;
} else {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
ele.className = ele.className.replace(reg, '');
}
};
var toggle = function(clk) {
c(clk);
}
var el = document.getElementsByClassName('time');
for (i = 0; i < el.length; i++) {
var btnToggle = el[i].getElementsByClassName('btn-toggle')[0];
var clk = el[i].getElementsByClassName('clock')[0];
btnToggle.addEventListener('click', function() {
toggle(clk)
}, false);
}
};
HTML:
<section>
<div class="time">
<a href="#" class="btn-toggle">Show the time</a>
<div class="clock">Clock1</div>
</div>
<div class="time">
<a href="#" class="btn-toggle">Show the time</a>
<div class="clock">Clock2</div>
</div>
<div class="time">
<a href="#" class="btn-toggle">Show the time</a>
<div class="clock">Clock3</div>
</div>
</section>
感谢您明智的建议!
您可以在正则表达式中使用'\\ b'而不是'\\ s | ^'构造。 '\ b'特殊表达式匹配一个单词的“边缘”,所以它正是你希望用于在空格分隔的类列表中匹配类名的。 – Pointy
贤者忠告:如果你正在做很多客户端操纵,进入像jQuery这样的框架。上面所有的js在使用jQuery时都是大约3行javascript。 – Jamiec
是的,我知道jquery - 并保持理智,我会永远在生产中使用它。在这种情况下,我只是玩弄一些JS而已。 – Galaxy