У меня есть jquery, чтобы добавить li в существующую ul, нажав кнопку и удалив один за другим, нажав другую кнопку. Создание работает, но удаление не работает. Я использовал append и remove для добавления и удаления li.
Вот мой код:
$(document).ready(function(){
var ListView = Backbone.View.extend({
el: $('body'), // el attaches to existing element
events: {
'click button#add': 'addItem',
'click button#remove': 'removeItem'
},
initialize: function(){
_.bindAll(this, 'render', 'addItem','removeItem');
this.counter = 0; // total number of items added thus far
this.render();
},
render: function(){
$(this.el).append("<button id='add'>Add list item</button>");
$(this.el).append("<button id='remove'>Remove list item</button>");
$(this.el).append("<ul></ul>");
},
addItem: function(){
this.counter++;
$('ul', this.el).append("<li>hello world"+this.counter+"</li>");
},
removeItem: function(){
alert(this.counter);
$('li',this.el).remove("<li>hello world"+this.counter+"</li>");
}
});
var listView = new ListView();
});
Вы можете либо вызвать remove()
для элемента, чтобы удалить его, либо дать ему действительный селектор для удаления некоторых других элементов. Поэтому вы можете попробовать либо
$('li:contains("hello world' + this.counter+ '")', this.el).remove()
или
$('ul', this.el).remove('li:contains("hello world' + this.counter+ '")')
Здесь я использую :contains
селектор. В вашем сценарии вы также можете использовать селектор :last-child
, который упрощает его как:
$('li:last-child', this.el).remove()
или
$('ul', this.el).remove('li:last-child')
Похоже, вы пытаетесь удалить последний элемент нажатием кнопки remove, если это так. вы можете изменить элемент удаления на
addItem: function(){
this.counter++;
$('ul', this.el).append("<li class='count-"+this.counter+"'>hello world"+this.counter+"</li>");
},
removeItem: function(){
$('li.counter-'+this.counter+,this.el).remove()
}
$('li.count-3',this.el).remove()
, обновлено ответ
Функция удаления не работает. Вы можете использовать селектор "nth-child (nth)" для удаления элемента...
removeItem: function(){
$('ul ' + 'li:nth-child('+this.counter+')',this.el).remove()
this.counter--;
}
Или, придерживаясь counter
:
removeItem: function(){
alert(this.counter);
this.$('li').eq(this.counter-1).remove();
this.counter--;
}
Не удаляйте элемент, передавая его весь html методу удаления, вам нужно использовать селектор, то есть идентификатор, класс, тип или что-то еще.
removeItem: function(e){
$('ul',this.el).remove('li:nth-child('+counter+')');
}
Это приведет к удалению одного li из ul в зависимости от вашего счетчика. Если вы хотите удалить один специальный li, вам нужно будет изменить настройку, потому что как кнопка может узнать, какой ли удалить при нажатии.
Вы можете сделать сам li кнопкой удаления, например:
events: {
'click li': 'removeLi'
}
и как функция удаления:
removeLi: function(e){
$(e.target).remove();
}
Надеюсь, поможет.
this.counter--
при удалении элемента?