我已经搜索并尝试了很多方法,比如closest()parents()以及parent()find()但是我根本无法成功。
我有这个html

<div  class='message_holder area2 user45 chatid32'>
    <a class='avatar' title='jhon'>
       <img height='28px' width = '28px' src="link to image" />
    </a>
 <div class='flag_holder'>
    <div class='edited  png32'></div>
    <div class='  png32'></div>
 </div>
 <div class='message user_chat'> hghgghgh</div>
 <div class='like_holder'>
    <div class='chattime'>02-12 22:16</div>
    <div class='likepng'></div>
    <div class='likescore'>5</div>
    <div class='unlikescore'>0</div>
    <div class='unlikepng'></div>
    <div class="like">
        <div class="editpng"></div>
        <div class="deletepng"></div>
    </div>
 </div>
</div>

所以我想要的是当我点击div classdeletepng时,我想要删除两个divunlikepnglikepng
这个js
 $(document).on ("click", ".deletepng", function () {
      $this = $(this);
     //alert( $this.closest(".like").html());  I could just make this to work
     // alert( $this.parents(".like_holder").html());  wont work
     // alert( $this.closest(".like_holder").html());  wont work
     // alert( $this.parent().parent().html());  wont work
     // alert( $this.closest(".like_holder").find(".like_holder").html()); wont work
 });

我只是想知道他们为什么不做我的尝试。哪里可能是我的错?
编辑:
我不知道这个有没有角色,我在对话框里试过
 $(document).on ("click", ".deletepng", function () {
 $this = $(this);
 $('<div>' + c_delete + '</div>').dialog({
  resizable: false,
  buttons: {
    "Yes": function() {
      chat_text_h.html('<div class="removed"> Removed</div>'); // do something here
      $(this).dialog("close");

      //alert( $this.closest(".like").html());  I could just make this to work
      // alert( $this.parents(".like_holder").html());  wont work
      // alert( $this.closest(".like_holder").html());  wont work
      // alert( $this.parent().parent().html());  wont work
      // alert( $this.closest(".like_holder").find(".like_holder").html()); wont work
    }
  }
});
});

最佳答案

使用closest然后使用第二个参数作为上下文。

$(document).on("click", ".deletepng", function() {
  var $holder = $(this).closest('.like_holder');
  $('.likepng, .unlikepng', $holder).remove();
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='message_holder area2 user45 chatid32'>
  <a class='avatar' title='jhon'>
    <img height='28px' width='28px' src="link to image" />
  </a>
  <div class='flag_holder'>
    <div class='edited  png32'></div>
    <div class='  png32'></div>
  </div>
  <div class='message user_chat'>hghgghgh</div>
  <div class='like_holder'>
    <div class='chattime'>02-12 22:16</div>
    <div class='likepng'>like</div>
    <div class='likescore'>5</div>
    <div class='unlikescore'>0</div>
    <div class='unlikepng'>unlike</div>
    <div class="like">
      <div class="editpng"></div>
      <div class="deletepng">delete</div>
    </div>
  </div>
</div>

编辑
自更新之后,您需要设置一个全局变量来记住$this或容器/持有者。试试这个:-
var $holder;

$(document).on("click", ".deletepng", function() {

  $holder = $(this).closest('.like_holder');

  $('<div>' + c_delete + '</div>').dialog({
    resizable: false,
    buttons: {
      "Yes": function() {
        chat_text_h.html('<div class="removed"> Removed</div>');
        $(this).dialog("close");

        $('.likepng, .unlikepng', $holder).remove();
      }
    }
  });
});

07-28 10:08