jQuery:如果选定的元素$(this)有一个类名为“last”的父元素

12

我一定漏掉了什么非常重要的东西,我一直在使用 .parent().parent().parent().. 等方法向下遍历DOM和 .next().next() 向上遍历DOM。

我知道这是错误的,我需要更可靠的选择器,它可以从被点击的元素 $(this) 向下遍历DOM,以查看被点击的元素是否在具有 "last" 类的元素内部。

div.last > div > table > tr > td > a[THE ITEM CLICKED is in the element last]

div > div > table > tr > td > a[THE ITEM CLICKED is not in the element last]

然后如果结果有长度

var isWithinLastRow = [amazingSelector].length;

在这种情况下做其他事情。


2
尝试使用 $(this).closest('div.last')。此外,.parent().next() 不是相关的(意思不是完全相反)。.next() 是用来获取下一个兄弟元素,而 .parent() 是直接跳到父元素。.next() 的确切相反操作是 .prev() - Selvakumar Arumugam
4个回答

22

试试这个:-http://jsfiddle.net/adiioo7/PjSV7/

HTML:

<div class="last">
    <div>
        <table>
            <tr>
                <td>
                    <a>Test</a>
                </td>
            </tr>
        </table>
    </div>
</div>
<div>
    <div>
        <table>
            <tr>
                <td>
                    <a>Test</a>
                </td>
            </tr>
        </table>
    </div>
</div>

JS:

jQuery(function($){
    $("a").on("click",function(){
       if($(this).closest(".last").length>0)
       {
           alert("Clicked anchor with div parent class as last");
       }
    });
});

9

你的问题有点难以理解。你想要检查被点击的元素是否有一个带有类名为 last 的祖先元素,是吗?

如果是,你可以使用 $.fn.parents 实现:

if ($(this).parents('.last').length) {
    // element has an ancestor element with the class "last"
}

1
latter的API中比较parentsclosest,看起来closest更快,因为它会在第一次匹配时停止。 - Paul

3
你可以这样做 -
if($(this).closest(".last").length > 0) {
   alert("it's inside");
}

1
你可以使用.closest()
var isWithLastRow = $(this).closest('div.last').length

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接