javascript - Removing the selected LI from a UL - Stack Overflow

I am trying to remove the selected item who class has "selected" but instead of just deleting

I am trying to remove the selected item who class has "selected" but instead of just deleting the LI item, the entire list is being cleared out. I am using jQuery for this.

I've put together a quick fiddle:

/

<!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>

I am trying to remove the selected item who class has "selected" but instead of just deleting the LI item, the entire list is being cleared out. I am using jQuery for this.

I've put together a quick fiddle:

http://jsfiddle/6QvvC/4/

<!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>
Share Improve this question edited Mar 31, 2014 at 20:40 Rahil Wazir 10.1k11 gold badges44 silver badges65 bronze badges asked Mar 31, 2014 at 20:36 user1451890user1451890 1,0953 gold badges13 silver badges19 bronze badges 3
  • 1 Fiddle doesn't work in FF or Chrome for me... – Phlume Commented Mar 31, 2014 at 20:39
  • You need to select the No wrap - in <body> option from the second dropdown on the left. Otherwise the script is wrapped in a function. – sabof Commented Mar 31, 2014 at 20:44
  • Alternatively, define the function as window.remove_selected_item=function(){...}; to expose the function globally. – vol7ron Commented Mar 31, 2014 at 20:46
Add a ment  | 

2 Answers 2

Reset to default 6

Function can be simplified:

function remove_selected_item() {
    $('#list1 ul li.selected').remove()
}

You need to removed selected item - so you select the li with class .selected and just remove it.

Demo: http://jsfiddle/6QvvC/3/

The jQuery selector #list1 ul li matches ALL li elements inside an ul inside an element with id list1. hasClass returns true if ANY of the matched elements contains the given class. remove removes all matched elements, which in the given case is all list elements. That is why the list is cleared.

Maybe dive into the power of jQuery selectors a bit: http://codylindley./jqueryselectors/ You can not only select elements based on their type or ID, but also on their class, their attributes, their position in the DOM (parents, siblings, children) and their state (e.g. hover).

When installing click handlers on list elements, the event delegation pattern is also pretty useful: https://learn.jquery./events/event-delegation/ It might help you to get a better understanding of how events and handler installation work with jQuery. It at least was some kind of revelation for me.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744183102a4562072.html

相关推荐

  • javascript - Removing the selected LI from a UL - Stack Overflow

    I am trying to remove the selected item who class has "selected" but instead of just deleting

    8天前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信