【发布时间】:2013-09-15 02:57:47
【问题描述】:
我有一个要求,我必须在容器中提取最后一个 .div 并对其应用一些业务逻辑。最后一个.div 的选择必须是动态的,因为用户可以选择添加/删除.div 元素。
最初我尝试使用querySelectorAll,但它似乎不起作用。所以我决定将其更改为getElementsByClassName,令人惊讶的是它使用相同的逻辑。有人可以帮我解释为什么 remove_div 不起作用而第二个 (remove_div_2) 起作用的原因吗?
注意:我不是在寻找问题的修复/解决方案,因为我已经开始使用第二个选项。我只是想知道querySelectorAll 选项不起作用的原因。
下面是我的代码:
HTML:
<div id='container'>
<div id='div1' class='div'>This is Div 1</div>
<div id='div2' class='div'>This is Div 2</div>
<div id='div3' class='div'>This is Div 3</div>
</div>
<button type='button' id='append_div'>Append Div</button>
<button type='button' id='remove_div'>Remove Div</button>
<button type='button' id='remove_div_2'>Remove Div 2</button>
JavaScript:
window.onload = function () {
var elementToStyle = document.querySelectorAll("#container .div");
elementToStyle[elementToStyle.length - 1].classList.add('red');
document.getElementById('append_div').onclick = function () {
var divToInsert = document.createElement('div');
divToInsert.id = 'new_div';
divToInsert.className = 'div';
divToInsert.innerHTML = 'This is an appended div';
document.getElementById('container').appendChild(divToInsert);
var elToStyle = document.querySelectorAll("#container .div");
for (i = 0; i < elToStyle.length; i++)
elToStyle[i].classList.remove('red');
elToStyle[elToStyle.length - 1].classList.add('red');
};
document.getElementById('remove_div').onclick = function () {
var elToStyle = document.querySelectorAll("#container .div");
document.getElementById('container').removeChild(elToStyle[elToStyle.length - 1]);
elToStyle[elToStyle.length - 1].classList.add('red');
};
document.getElementById('remove_div_2').onclick = function () {
var elToStyle = document.getElementsByClassName('div');
document.getElementById('container').removeChild(elToStyle[elToStyle.length - 1]);
elToStyle[elToStyle.length - 1].classList.add('red');
};
}
【问题讨论】:
标签: javascript html selectors-api