So I’m trying to to basically dynamically create li’s inside an array, and I would like to create a ‘delete’ button within each li, so that when I click that li, I can delete that specific li.
I know this seems very basic, but I’ve been looking at JS for hours now, and am starting to really confuse myself here.
I keep getting errors like addChild() is not a function… I feel like I’m close, but no cigar. Thanks in advance!
Anyway, here’s my add function:
function add(){
var deleteBtn = document.createElement('input');
deleteBtn.type = 'submit';
deleteBtn.name = 'addButton';
deleteBtn.className = 'deleteButton';
for(i=0;i<1;i++){
id_number[i] = i+1;
var newSong = '<li class="li_test" id="' + id_number[i] + '">' + "<span>" + "</span>" + '</li>';
// $(newSong).appendChild(deleteBtn);
$(deleteBtn).appendTo("#playlist-1");
$(newSong).appendTo("#playlist-1");
showList.push(newSong);
deleteBtn.addEventListener('click', function(evt) {
deleteFromPlaylist(newSong);
});
}
}
Here’s my delete function
function deleteFromPlaylist(newSong){
var deleteBtn = document.getElementsByTagName('deleteButton');
// var deleteMe = deleteBtn.parentNode;
alert(deleteBtn);
for(i=0;i<showList.length;i++){
if(newSong === showList[i]){
showList.splice(i,1);
// var pp = p.parentNode;
// pp.removeChild (p);
deleteMe = deleteMe.parentNode.remove("li_test");
deleteMe.removeChild(deleteBtn);
}
// console.log(deleteMe);
}
}
EDIT: 1 More Related Question
I would like to only add an item if it doesn’t exist already in the array. Here is what I have so far. Any tips on where I’m going wrong?
for (i = 0; i < showList.length; i++) {
if (newSong !== showList[i]){
ul_list.innerHTML = newSong;
container_div.appendChild(ul_list); //append the info
container_div.appendChild(deleteBtn);
document.getElementById('playlist-1').appendChild(container_div); //finally add it to the playlist div
showList.push(newSong);
deleteBtn.addEventListener('click', function(evt) {
deleteFromPlaylist(evt, newSong);
});
inc++;
alert("It IS in the Array!");
}else{
alert("This already exists!");
}
}
I’ve altered your code and functions to purely use javascript, instead of a mixture containg jquery. I’ve added comments in the code to explain my actions. If you have any questions, feel free to ask.
Update:
I’ve modified the above function to strictly use objects, rather than strings, because it is easier to extract relevant information from objects, than strings.
I’ve added in comments to assist with understanding the code. Again, if you have any questions, feel free to ask.
DEMO, notice that
add()is executed twice, but because the song ‘test’ already exists, it only executes the end action once.