Удаление родительского элемента нажатием на div?

#javascript #jquery #asp.net

#javascript #jquery #asp.net

Вопрос:

У меня создается форма, подобная этой

         <%for (var i = 0; i < user.categories.length; i  ) {%>
        <div class="form-group" id="<%=i %>">
        <input type="text" class="form-control" name="category<%=i %>name" value="<%=user.categories[i].taskname%>" placeholder = "Enter task name">
        <input type="number" class="form-control" name="category<%=i %>priority" value="<%=user.categories[i].taskpriority%>" placeholder = "Enter task priority" min="1" max="3">
        <input type="number" class="form-control" name="category<%=i %>duration" value="<%=user.categories[i].taskduration%>" placeholder = "Enter task duration" min="0" max="24">
        <button class = "delete" id="<%=i %>" type="button">Delete</button>
            <!--<input type="text" class="form-control" name="category<%=i %>" value="<%=user.categories[i] %>"> -->
                            <br>
        </div>
                        <br>

        <%} %>
  

И этот скрипт

     $(".delete").click(function(){
        var parent = this.parent();
        alert(this.id); 
        parent.empty();


    });
  

Я создаю кнопку удаления с идентификатором i, и я подумал, что jquery захватит элемент, на который я нажал, затем найдет его родительский div и удалит весь div. Однако этого не происходит, есть идеи, почему?

Комментарии:

1. Не просто parent.remove(); ?

2. parent.remove() тоже не работает

3. Ааааа, вы не оборачиваете, this я полагаю this , это дало бы вам чистый HTML, попробуйте обернуть его в $(this)

Ответ №1:

Вы смешиваете jQuery и обычный javascript. В обработчике событий jQuery this является объектом DOM (не объектом jQuery), а объект DOM не имеет .parent() метода. У него есть .parentNode свойство. Если вы хотите получить объект jQuery, для которого вы можете вызвать метод jQuery .empty() , тогда вам нужно использовать $(this) вот так:

 $(".delete").click(function(){
    var parent = $(this).parent();
    parent.empty();
});
  

Или более компактным способом:

 $(".delete").click(function(){
    $(this).parent().empty();
});
  

Кроме того, .empty() просто очистит содержимое родительского элемента. Это не приведет к удалению родительского элемента, но удалит все дочерние узлы в родительском элементе (например, очистит родительский элемент). Если вы действительно хотите удалить родительский элемент, вы бы использовали .remove() вот так:

 $(".delete").click(function(){
    $(this).parent().remove();
});
  

Комментарии:

1. Кроме того, зависит от того, хотите ли вы удалить весь контейнер целиком или просто очистить содержимое от того, используется ли .empty() или .remove() .

2. @No1_Melman — добавил информацию о .remove() к моему ответу. Не совсем ясно, чего хочет OP.

Ответ №2:

Это происходит потому, что this оператор в замыкании не является объектом jQuery. Это всего лишь HTMLЭлемент. Итак, сначала вам нужно преобразовать this в jQuery, чтобы получить доступ к методу .parent():

 var parent = jQuery(this).parent();