Я реализую функцию, в которой каждый дочерний элемент имеет кнопку, удаляющую этот элемент из DOM. Когда остается только один такой элемент, мне нужно удалить и родительский элемент.
Проблема в том, что в родительском элементе иногда присутствуют элементы до и после, поэтому проверка должна учитывать это и, вероятно, должна основываться на типе элемента, за которым я следую, а именно div.
Так что я в основном ищу div:only-of-type
, но версию javascript, а не jquery.
Я представляю себе что-то вроде этого:
if (target.parentNode.onlyOfType()) {
//do seomthing
}
1 ответ
Вы можете проверить длину children
из parentNode
, на основании которой вы можете удалить родительский элемент целевого элемента.
<Сильные> Демо:
var btns = document.querySelectorAll('.myClass');
Array.from(btns).forEach(function(b){
b.addEventListener('click', function(target){
if (this.parentNode.children.length == 1) {
this.parentNode.remove();
}
else alert('Has other child, can not be deleted');
})
});
<div class="">Container 1
<button type="button" class="myClass">Delete</button>
<label>Some Other</label>
</div>
<div class="">Container 2
<button type="button" class="myClass">Delete</button>
</div>
<div class="">Container 3
<label>Some Other</label>
<button type="button" class="myClass">Delete</button>
</div>
Если вы хотите проверить тип, вы можете использовать querySelectorAll()
следующим образом:
var btns = document.querySelectorAll('.myClass');
Array.from(btns).forEach(function(b){
b.addEventListener('click', function(){
var type = this.type;
if (this.parentNode.querySelectorAll(type).length == 1) {
this.parentNode.remove();
}
else alert('Has other child with same type, can not be deleted');
})
});
<div class="">Container 1
<button type="button" class="myClass">Delete</button>
<label>Some Other</label>
</div>
<div class="">Container 2
<button type="button" class="myClass">Delete</button>
</div>
<div class="">Container 3
<label>Some Other</label>
<button type="button" class="myClass">Delete</button>
<button type="button" class="myClass">Edit</button>
</div>
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
document.querySelectorAll('div').length === 1
?