Как при нажатии кнопки удалить ещё и внешний блок?
Нашла в интернете код, который удаляет блоки div. При нажатии удаляется тот блок в который вложена кнопка удаление. У блока есть класс card, по нему и происходит удаление. Как сделать, чтобы при нажатии удалялся еще и внешний блок который не вложен в class card. Пример в коде. У блоков есть название текст 1, текст 2, текст 3 и текст 4. У внешних блоков тоже есть название текст 1_1, текст 1_2, текст 1_3, текст 1_4. Удаление по идеи должно происходить, таким образом “текст 1” = “текст 1_1” и т.д. Как это сделать. Вот весь код:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<style>
body {
display: flex;
}
.card {
text-align: center;
border: 1px solid #000;
background: #ccc;
}
</style>
<script>
$(document).ready(function(e){
function removeElem(delElem, attribute, attributeName) {
if (!(delElem && attribute && attributeName)) return;
return function(e) {
let target = e.target;
if (!(target.hasAttribute(attribute) ?
(target.getAttribute(attribute) === attributeName ? true : false) : false)) return;
let elem = target;
while (target != this) {
if (target.classList.contains(delElem)) {
target.remove();
return;
}
target = target.parentNode;
}
return;
};
}
document.addEventListener("click", removeElem("card", "data-del", "delete"));
});
</script>
</head>
<body>
<div>Текст 1_1</div>
<div>Текст 1_2</div>
<div>Текст 1_3</div>
<div>Текст 1_4</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 1</h5>
<button type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 2</h5>
<button type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 3</h5>
<button type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<span class="separator mx-auto"></span>
<h5 class="card-title">Текст 4</h5>
<button type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
</body>
</html>
|
Katy93,
класс текстовым блокам можно присвоить? |
Да, конечно.
|
Katy93,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style>
body {
display: flex;
}
.card {
text-align: center;
border: 1px solid #000;
background: #ccc;
}
</style>
<script>
document.addEventListener( "DOMContentLoaded" , function() {
const on = (parent, event, selector, fn) => parent.addEventListener(event, ({target}) => {
if(target = target.closest(selector)) fn(target)
})
const remove = del => {
const card = del.closest(".card.show");
const index = [...document.querySelectorAll(".card.show")].indexOf(card);
card.remove();
document.querySelectorAll(".txt")[index].remove();
};
on(document, "click", ".card.show [data-del]", remove);
});
</script>
</head>
<body>
<div class="txt">Текст 1_1</div>
<div class="txt">Текст 1_2</div>
<div class="txt">Текст 1_3</div>
<div class="txt">Текст 1_4</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 1</h5>
<button type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 2</h5>
<button type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 3</h5>
<button type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<span class="separator mx-auto"></span>
<h5 class="card-title">Текст 4</h5>
<button type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
</body>
</html>
|
Я проверила ваш пример, на Windows XP, с установленными последними версиями браузеров. Только на FireFox, работает нормально на Chrome и Opera не работает. Выдаёт ошибку:
Цитата:
Всё таки мне бы хотелось пример, который работал и под Windows XP. Операционка хоть и старая но по моей статистики вебвизор показывает, что ей до сих пор пользуются. Я решила пример вот так присвоив id как кнопки так и внешним блокам при нажатии поиск осуществляется по id, а потом удаляется. Вот пример:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<style>
body {
display: flex;
}
.card {
text-align: center;
border: 1px solid #000;
background: #ccc;
}
</style>
<script>
$(document).ready(function(e){
function removeElem(delElem, attribute, attributeName) {
if (!(delElem && attribute && attributeName)) return;
return function(e) {
let target = e.target;
if (!(target.hasAttribute(attribute) ?
(target.getAttribute(attribute) === attributeName ? true : false) : false)) return;
let elem = target;
while (target != this) {
if (target.classList.contains(delElem)) {
target.remove();
document.getElementById(elem.getAttribute('id')).remove();
return;
}
target = target.parentNode;
}
return;
};
}
document.addEventListener("click", removeElem("card", "data-del", "delete"));
});
</script>
</head>
<body>
<div id="test1">Текст 1_1</div>
<div id="test2">Текст 1_2</div>
<div id="test3">Текст 1_3</div>
<div id="test4">Текст 1_4</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 1</h5>
<button id="test1" type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 2</h5>
<button id="test2" type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<h5 class="card-title">Текст 3</h5>
<button id="test3" type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
<div class="card show">
<div class="card-body">
<span class="separator mx-auto"></span>
<h5 class="card-title">Текст 4</h5>
<button id="test4" type="button" class="btn btn-outline-secondary" data-del="delete">Удалить</button>
</div>
</div>
</body>
</html>
|
Дело не в операционке, а в версиях браузеров.
Возьмите последние версии Хрома и Оперы Но в ИЕ все это все равно работать не будет Вот это ИЕ не возьмет const card = del.closest(".card.show"); const index = [...document.querySelectorAll(".card.show")].indexOf(card); card.remove(); Если очень надо, ищете полифилы. По мне так очень странно писать код в расчете на ИЕ-6 и НетскейпНавигатор. if (target.classList.contains(delElem)) Тоже не будет работать в ИЕ <10. А 10 и 11 нет в ХР |
| Часовой пояс GMT +3, время: 13:11. |