2012-03-01 6 views
1

У меня есть ссылка для удаления, которая удалит текущий комментарий на моей странице. Он использует Ajax, чтобы изменить базу данных и в случае успеха, я хочу, чтобы удалить DIV комментарий находится в Каждый комментарий на странице выглядит следующим образом:.Удалить родительский div по имени класса - jquery

<div class="aComment"> 
    <span class="commentTitle">Posted by xxx at xxx - <a href="javascript:void(0)" class="deleteComment" data-commentid="anID"><img src="resources/images/delete_comment.png" title="Remove this comment" /></a></span> 
    <span class="commentText">comment text here</span> 
</div> 

Я не могу понять, как удалить DIV один раз он вернул успех. Я пробовал

$(this).parent().remove(); 

и не повезло. $(this) относится к якорной метке, поэтому parent() якоря должен быть <div class="aComment"> справа?

+1

You нужен дополнительный '.parent()', так как родителем тега привязки является 'span', а не' div'. –

+0

yep, вы тоже правы, я был один на один – Ronnie

ответ

4

В вашей Ajax обратного вызова this не относится к элементу анкера, но даже если это так, метод .parent() возвращает немедленного родителя, т.е. , элемент span, а не div.

Если у вас есть ссылки на якорь, вы можете сказать:

$theAnchor.parent().parent().remove(); // get a's parent's parent 

... но, конечно, это своего рода хрупким, потому что если вы позже изменить структуру HTML, вы должны изменить код , Так что лучше использовать .closest() для поиска по дереву до ближайшего предка элемента, который соответствует:

$theAnchor.closest("div").remove(); 

Вы не показывать обработчик щелчка, но это нужно будет, чтобы быть что-то вроде этого:

$(".aComment a").click(function() { 
    // keep a reference to the clicked a element for use 
    // in the ajax callback 
    var $theAnchor = $(this); 

    $.ajax(/* your ajax parameters here */, function() { 
     $theAnchor.closest("div").remove(); 
    }); 
}); 
+0

так что $ (". DeleteComment"). Live ("click", function() {$ (this)}); не ссылается на 'deleteComment'? – Ronnie

+0

В этом случае да, 'this' относится к элементу, но вы сказали, что хотите удалить элемент после успешного возвращения ajax, и я предположил, что вы сделаете это из функции обратного вызова ajax, в какой точке' this' не обратитесь к любому конкретному элементу (если вы не используете '.load()', что было бы странно). – nnnnnn

+0

ahhh ok Я понимаю сейчас, и я получил его на работу. Это то, что я сделал ... в целом, что вы показали выше http://pastie.org/3499974 спасибо – Ronnie

4

Использование closest():

$(this).closest(".aComment").remove(); 

Example.

Родитель тега a является span. div, который вы пытаетесь удалить, является родителем этого span.

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

+0

А вы правы, однако он все еще не удаляет div. Я думаю, это может быть из-за того, что я попал в окно prettyPhoto: http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/. Я буду использовать ближайший и попытаюсь заставить это работать – Ronnie

2

Это должно быть

$(this).parent().parent().remove(); 
0

Вы бы лучше решать, установив идентификатор для комментария в коде.

Например:

<div class="aComment" data-comment-id="5"> 

Затем, используя этот идентификатор с запросом AJAX и ответ.

немного больше работы, но это более надежная (IMO)

0

Если вы пытаетесь удалить его щелчком:

$(".aComment a").on('click', function(){ 
    $(this).closest(".aComment").remove(); 
}); 

http://jsfiddle.net/gaQuu/

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