【问题标题】:Remove parent of a parent with jQuery and DOM使用 jQuery 和 DOM 删除父级的父级
【发布时间】:2011-03-22 11:05:27
【问题描述】:

我的 html 看起来像这样:

<li>
    <div>
        <p class="delete">
            <a href="#">X</a>
        </p>
    </div>
    <div class="friend-avatar">
        <img src="" />
    </div>
</li>

单击“删除”段落中的锚标记后,我将显示一个弹出窗口(使用 jquery-alert),如果用户选择“是”,我希望包含此单击 a 的整个 li 淡出然后将其删除。我正在尝试这样的事情,但 li 仍然可见:

$(function() {
    $(".delete a").click( function(){
        jConfirm('Remove friend?', 'Confirmation Dialog', 
        function(r){
            if(r==true){
               parent_li = $(this).closest('li');
               parent_li.fadeOut('slow', function() {$(this).remove();});
            }   
        });
        return false;
    });
});

我做错了什么?

更新

刚刚注意到,当我单击此“删除”链接时,萤火虫显示以下错误:

a.ownerDocument is undefined
/site_media/jquery/jquery-1.4.2.js
Line 117

【问题讨论】:

标签: jquery dom jquery-plugins jquery-selectors


【解决方案1】:

我不熟悉那个插件,但我猜this 不是指被点击的元素,而是指对话框。

尝试在jConfirm()之外的变量中引用this

$(function() {
    $(".delete a").click( function() {

            // reference the <a> element
        var $a = $(this);
        jConfirm('Remove friend?', 'Confirmation Dialog', 
        function(r){
            if(r==true){

                 // use a to find the closest <li>
               var parent_li = $a.closest('li');
               parent_li.fadeOut('slow', function() {$(this).remove();});
            }   
        });
        return false;
    });
});

【讨论】:

    【解决方案2】:

    您对 parent_li 的引用超出了变量的范围。

    出于兴趣,我会将调用改回它自己的函数,这样我就可以重用它。

    $(function() {
        $(".delete a").click( function(){
            jConfirm('Remove friend?', 'Confirmation Dialog', 
            function(r){
                if(r==true){
                   parent_li = $(this).parents('li');
                   $(parent_li).fadeOut('slow', removeLi(parent_li));
                }   
            });
            return false;
        });
    });
    
    function removeLi(parent_li){
        $(parent_li).remove();
    };
    

    【讨论】:

      【解决方案3】:

      您应该将 $(this) 存储在一个变量中,因为您的弹出函数内的范围会发生变化。

      执行以下操作:

      $(function() {
          $(".delete a").click( function(){
              var $link = $(this); // Here's the magic
              jConfirm('Remove friend?', 'Confirmation Dialog', 
              function(r){
                  if(r==true){
                     parent_li = $link.closest('li');
                     parent_li.fadeOut('slow', function() {$(this).remove();});
                  }   
              });
              return false;
          });
      });
      

      【讨论】:

      • Patrick 已经mentioned
      • 是的,在我看到答案之前就写好了。我希望橙色的“新答案已发布”是一致的。
      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多