Either I am making a very silly mistake here, or there is a bug with jQuery's .add
method. Most likely the former.
I am trying to implement a list of items that could be selected. Here's my code on jsfiddle.
The test case that is failing is the following:
Ctrl
).Now, I'd expect the first and second to be de-selected, I believe the implementation also does this. But the second one does not get de-selected.
Digging a little, it seems that the .add
is actually not adding my elements to the jQuery object set and for the life of me, I can't figure out why.
Any suggestions on this? Or is this not the way the .add
method is supposed to be used?
Edit: I know jquery-ui has a control for this kind of thing, but I have already evaluated it and it does not work for me. Thanks.
remove() – Removes all child elements with selected element. In this method you can restore all data but not event handlers of removed elements from the DOM. All data and events related with elements will be removed. empty() – Removes all content and child elements from the selected element.
Answer: Use the jQuery append() Method You can simply use the jQuery append() method to add <li> elements in an existing <ul> element. The following example will add a <li> element at the end of an <ul> on click of the button.
We can replace HTML elements using the jQuery . replaceWith() method. With the jQuery replaceWith() method, we can replace each element in the set of matched elements with the provided new content and return the set of elements that were removed.
Answer: Use the jQuery append() or prepend() method You can add or insert elements to DOM using the jQuery append() or prepend() methods. The jQuery append() method insert content to end of matched elements, whereas the prepend() method insert content to the beginning of matched elements.
.add
returns a new jQuery object, so you need to grab the value returned.
prevSelections = prevSelections.add(...);
Here's some other cleanup applied:
var ps = $(),
clazz = 'selected';
$('#list').delegate('li', 'click', function(e) {
if (e.ctrlKey) {
ps = ps.add($(this).toggleClass(clazz));
} else {
if (ps.length) {
ps.removeClass(clazz);
}
ps = $(this).addClass(clazz);
}
});
Demo: http://jsfiddle.net/mattball/mAPQA/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With