【发布时间】:2014-09-02 12:16:05
【问题描述】:
在将 jQuery 代码转换为 HTML5 javascript 时,我在选择所有 LI 标记时遇到问题 代码。我已将 click 事件应用到父 UL,并且 click 事件正在应用到正确的单击目标 LI。 “选定”类也被应用。问题是我需要在应用“选定”类之前从 LI 标记中清除所有类,因为我只希望它应用于当前事件目标。在 jQuery 中,这只是从 LI 中删除类的问题,但是我遇到了针对所有 LI 标记并在 javascript 中删除类的问题。我怀疑问题是我如何迭代从 QuerySelectorAll 返回的节点列表。除其他外,我还尝试了 document.GetElementsByTagName,并对其进行了迭代。
我在 myFunc 函数上收到“Uncaught TypeError: Cannot read property 'contains' of undefined”。
如果有人能指出我的错误,我会非常高兴。
<div id='button'></div>
<ul id='swatches'>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
jQuery 代码
$('li').on('click', function(){
$('li').removeClass('selected');
$(this).toggleClass('selected');
});
使用 classList API
var swatch = document.getElementById('swatches'),
$li = document.querySelectorAll('#swatches li');
swatch.addEventListener('click', myFunc, false);
function myFunc(e){
var target = e.target;
for(var i=0; i<$li.length; i++){
if($li.classList.contains('selected')){
$li.classList.remove('selected');
}
}
if(target.nodeName.toLowerCase() === 'li'){
e.target.classList.toggle('selected');
}
}
【问题讨论】:
标签: javascript event-delegation