Reputation: 53
var overrideField = document.querySelectorAll('.form_style_override_field');
overrideField.forEach(function (e) {
e.parentNode.parentNode.remove();
});
I am trying to learn vanilla javascript and trying to remove an element which is pulled by classname.
var overrideField = document.getElementsByClassName('form_style_override_field');
for (var i = 0; i < overrideField.length; i++)
{
var controlGroup = overrideField[i].parentNode.parentNode;
controlGroup.remove();
}
var overrideField = document.getElementsByClassName('form_style_override_field');
for (var i = 0; i < overrideField.length; i++)
{
var controlGroup = overrideField[i].parentNode.parentNode;
controlGroup.remove();
}
<div class="tab-pane active show" id="general">
<div class="control-group">
<div class="control-label">Label 1</div>
<div class="controls">
<span class="form_style_override_field"></span>
Control Group 1
</div>
</div>
<div class="control-group">
<div class="control-label">Label 2</div>
<div class="controls">
<span class="form_style_override_field"></span>
Control Group 2
</div>
</div>
</div>
The overrideField variable sees 2 elements and it will only remove the last one. Can anyone help me figure it out please.
Thanks!
Upvotes: 1
Views: 768
Reputation: 15120
getElementsByClassName
returns a live collection, so when you remove an element in your for loop the collection (and length) changes so your loop never gets to the last element. Use querySelectorAll
instead to return a static collection and then remove the elements.
For example:
var elems = document.querySelectorAll('.class-to-remove');
elems.forEach(function(elem) {
elem.remove();
});
Upvotes: 5