Я пытаюсь удалить выбранный элемент, который класс "выбрал", но вместо простого удаления элемента LI весь список очищается. Для этого я использую jQuery.
Я собрал быструю скрипку:
<!DOCTYPE html>
<html>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script src="jquery.min.js"></script>
<head>
<style type="text/css">
* {
font-size: 9pt;
font-family: Segoe UI;
}
#refdocs {
border: 0;
padding: 2px;
}
#box1 {
border: 1px solid rgb(170,170,170);
width: 200px;
}
#box2 {
width: 100%;
display: block;
position: relative;
border-bottom: 1px solid rgb(170,170,170);
}
#container {
height: 100px;
overflow-y: scroll;
overflow-x: hidden;
}
#list1 {
width: 100%;
}
#list1 ul {
margin: 0;
padding: 0px;
list-style-type: none;
}
#list1 li {
cursor: default;
padding: 2px;
}
.selected {
background: rgb(228,228,228);
}
</style>
<script type="text/javascript">
window.onload = function() {
refresh_list()
}
function remove_selected_item() {
if ( $('#list1 ul li').hasClass("selected") ) {
alert("yup")
$('#list1 ul li').remove()
}
else {
alert("nope")
}
}
function refresh_list() {
$('#list1 ul li').click(function () {
$('#list1 ul li').removeClass('selected');
$(this).addClass('selected');
document.getElementById('refdocs').value = $(this).text()
});
}
</script>
</head>
<body>
<div id="box1">
<div id="box2"><input type="text" id="refdocs"></div>
<div id="container">
<div id="list1">
<ul>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ul>
</div>
</div>
</div>
<input type="button" value="delete" onclick="remove_selected_item()">
</body>
</html>
Функция может быть упрощена:
function remove_selected_item() {
$('#list1 ul li.selected').remove()
}
Вам нужно удалить выбранный элемент - так что вы выбираете li
с классом .selected
и просто удаляете его.
$('#list1').find('ul li.selected').remove()
Селектор jQuery #list1 ul li
соответствует всем элементам li
внутри ul
внутри элемента с идентификатором list1
. hasClass
возвращает true, если ANY из согласованных элементов содержит данный класс. remove
удаляет все согласованные элементы, которые в данном случае являются всеми элементами списка. Вот почему список очищается.
Возможно немного погрузиться в мощь селекторов jQuery: http://codylindley.com/jqueryselectors/ Вы можете не только выбирать элементы на основе их типа или идентификатора, но также и их класса, их атрибутов, их позиции в DOM (родители, братья и сестры, дети) и их состояние (например, зависание).
При установке обработчиков кликов в элементах списка шаблон делегирования событий также очень полезен: https://learn.jquery.com/events/event-delegation/ Это может помочь вам лучше понять, как работают события и обработчик с помощью JQuery. Это, по крайней мере, было для меня некоторым откровением.
No wrap - in <body>
во втором раскрывающемсяNo wrap - in <body>
слева. В противном случае скрипт обернут в функцию.