2012-06-15 2 views
9

У меня есть DIV, который я хочу удалить, когда я нажимаю ссылку, содержащуюся внутри этого DIV. Вот что у меня есть:Удалить DIV на Click

<div id="clients-edit-wrapper"> 
    <div class="close-wrapper"> 
     <a href="#" class="close-div">Close</a> 
    </div> 
</div> 

Когда я нажимаю «Закрыть» Я хочу clients-edit-wrapper быть удалены. Я ищу способ сделать это, указав родительский DIV ссылки Close, который в этом случае равен clients-edit-wrapper.

Любая помощь была бы принята с благодарностью!


Ответ от Huangism ниже:

$('.close-div').click(function(){ 
    $(this).parent().parent().remove(); 
}); 

Это работает только если элемент, который вы хотели бы удалить, два родителя до. В моем случае это именно то, что мне нужно.

+0

Ваш ответ будет зависеть от того, если вы хотите удалить DIV в относительном порядке (через родителей или ближайший) или абсолютный (через id). – lucuma

+0

Он будет относительным образом (через родителя). – FastTrack

+1

Относительно принятого ответа. Вместо этого используйте 'on()'. 'live()' устарел от jQuery 1.7. Если вы используете jQuery 1.6 и раньше, используйте 'delegate()' вместо 'live()'. Я считаю, что причина в том, что 'live()' выставлены проблемы с памятью. Если вы используете версию 1.3 и ранее, используйте 'bind()'. 'bind()' был добавлен в 1.0, 'live()' в 1.3, 'delegate()' в 1.4.2 и 'on()' в 1.7. – Nope

ответ

8

учитывая ваш HTML разметки

Обновлен .on()

$('.close-div').on('click', function(){ 
    $(this).parent().parent().remove(); 
}); 

на самом деле используют этот метод ближе всего(), он является более надежным и более логично. При том, что вы можете обернуть более закрыть-ДИВ, и это не будет иметь значения

От ответа для Vision в

$(this).closest("#clients-edit-wrapper").remove(); 

больше гибкости

Редактировать
(Добавлены соответствующие ресурсы)
Пожалуйста, см JQuery документация по live()

Начиная с jQuery 1.7, метод .live() равен устаревшим. Используйте .on() до , присоедините обработчики событий. Пользователи более старых версий jQuery должны использовать .delegate() в предпочтении .live().

Насколько я знаю, это связано с проблемами памяти/проблемами с live().

+0

Это именно то, что я искал. Благодаря Huangism! Я буду принимать правильный ответ за 5 минут. – FastTrack

+0

@FastTrack вы должны использовать ближе всего, как в ответе Видения, лучше логически, более гибко – Huangism

+0

Huangism: Но если бы я использовал решение Vision, мне пришлось бы поместить несколько экземпляров '$ (this) .closest (« # clients » -edit-wrapper "). remove();' для каждого DIV, который имеет ссылку .close-div. – FastTrack

1
$('#clients-edit-wrapper').find('.close-div').click(function(){ 
    $('#clients-edit-wrapper').remove(); 
}); 
8

Вот одно решение:

$(".close-div").on("click", function(event) { 
    $("#clients-edit-wrapper").remove(); 
    event.preventDefault(); 
}); 

Чтобы получить #clients-edit-wrapper элемент относительно .close-div элемента, вы можете использовать либо parent().parent() или closest с ID:

$(this).parent().parent().remove();     // will do 
$(this).closest("#clients-edit-wrapper").remove(); // the same 

Однако последний Безразлично Это имеет смысл, поскольку идентификаторы элементов страницы должны быть уникальными, и не будет другого #clients-edit-wrapper.

1

Вы также можете использовать closest.

$('.close-div').on('click', function(e) { 
    e.preventDefault(); 
    $('#clients-edit-wrapper').remove(); 
}); 
2
$(".close-div").click(function(){ 

    $("#clients-edit-wrapper").remove(); 

}); 
1

Поскольку вы основываете элемент от родителя, я поощрил бы событие делегирования:

$("#clients-edit-wrapper").on("click", ".close-div", function(e){ 
    e.preventDefault(); 
    $(e.delegateTarget).remove(); 
}); 
1
<div id="clients-edit-wrapper"> 
    <div class="close-wrapper"> 
     <a href="#" onclick="$('#clients-edit-wrapper').remove();" class="close-div">Close</a> 
    </div> 
</div> 
+1

Кто и почему дал парню -1? [Вот jsfiddle, который показывает, что он работает должным образом.] (Http://jsfiddle.net/Nz2JK/) +1 от меня. – Boro

+3

Я не голосовал на этом ответе, однако практика смешивания JavaScript с Markup неодобрилась. Это делает сложный код управления. Лучше делать все привязки с JavaScript, а не от таких атрибутов, как 'onclick'. – Sampson

+0

Хороший ответ. Написание кода в разметке полезно в таких ситуациях, когда этого не требуется. –

Смежные вопросы