Поскольку вы уже используете classList
Я предполагаю, что вы только питание для браузеров достаточно новых для addEventListener()
, поэтому я хотел бы предложить удаление всех onclick
атрибутов и делать что-то вроде этого:
document.addEventListener('click',function(e){
if (e.target.tagName === "IMG") {
var imgs = document.getElementsByTagName('IMG');
for (var i = 0; i < imgs.length; i++)
if (imgs[i] != e.target)
imgs[i].classList.remove('foo');
e.target.classList.toggle('foo');
}
}, false);
Демо: http://jsfiddle.net/q3aRC/3/
То есть, связать один обработчик щелчка к документу (или вы могли бы связать с родительским элементом изображения, если они ша re the common parent), а затем при тестировании кликов, если щелкнутый элемент является одним из элементов, которые вас интересуют (то есть img) и оттуда ... JS заканчивается примерно такой же длины, но html заканчивается короче и аккуратно. Вы также можете удалить атрибут id
, если вы не использовали его для чего-либо другого, кроме вашей исходной функции clicked()
.
Я использовал getElementsByTagName()
, чтобы показать вам еще один способ сделать это, но getElementsByClassName()
или querySelectorAll()
(как и в других ответах), вероятно, являются лучшими вариантами. Но это простой способ сделать.
Покажите нам, что вы попробовали. –