17

我在 Stack Overflow 上发现了很多相关的东西,但不适用于我的情况。

这一切都在这个例子中,我需要检查一个元素是否包含另一个元素,如果是,附加一些东西。

$(".bt_repondre").click(function(){
    comment = $(this).parent().parent().parent();
    //I want to check if comment contains a .comment_full element, if no, append.
    comment.append('add');
});

希望你能帮助我,我尝试了很多东西......

4

7 回答 7

38

您可以使用.has.length

if (comment.has('.comment_full').length) {
    // It has that element
}
  • .find将遍历所有后代,但.has一旦找到与选择器匹配的后代就会停止。它可能跑得更快。

  • .length只是检查结果元素集的长度是否非零。

于 2012-11-01T18:01:17.170 回答
20

只需使用.find()并检查是否返回一个元素,如下所示:

$(".bt_repondre").click(function(){
    comment = $(this).parent().parent().parent();
    if (! comment.find('.comment_full').length) {
       comment.append('add');
    }
});
于 2012-11-01T18:00:49.533 回答
12

这些答案大多是不正确的。您必须传递一个 DOM 节点而不是 jQuery 元素才能使 $.contains 按照https://api.jquery.com/jQuery.contains/正常工作。

例如,这是您确定 if $('#a')contains 的方式$('#b)

HTML:

<div id="a">
  <div id="b"></div>
</div>

JavaScript:

var $a = $('#a');
var $b = $('#b');
var contains = $.contains($a.get(0), $b.get(0));
console.log('contains', contains);
// outputs `true`
于 2016-06-10T19:19:50.013 回答
3

这些答案中的大多数都很棒,但是有一个称为contains(container,contained)(在 1.4 中添加)的新方法,它返回一个Boolean! 它与 Blender 的代码片段基本相同,但可能更快,无论是键入还是执行。

在您的代码中实现,它看起来像这样:

$(".bt_repondre").click(function(){
    comment = $(this).parent().parent().parent();
    if(!$.contains(comment, $('.comment_full')))//same as if(!jQuery.contains(...
    {
        comment.append('add');
    }
});
于 2014-02-16T20:30:44.960 回答
2

如果您正在寻找,假设表中任何 tr 元素的 id 为 myTable,您可以使用以下代码:

if($('#productsTableBody tr').length)
{
//...
}

这样我们就可以检查表是否包含任何行。

于 2016-10-13T10:51:26.413 回答
0

试试这个

 comment.has('a.comment_full').length == 0
于 2012-11-01T18:02:01.007 回答
0

这对我来说是这样的:

$(window).click(function(e) {
    // if popup is visible
    if($('.assignment_popup:visible').length) {
        
        popup_id = $('.assignment_popup:visible').attr('id');

        // if user clicked on popup itself or on something inside popup then do nothing
        if($(e.target).hasClass('open-popup') || $(e.target).hasClass('assignment_popup')) {
            return;
        }

        // if clicked element is not inside the popup then close the popup
        if(!$('#' + popup_id).find(e.target).length) {
            $('#' + popup_id).fadeOut(500);
        }
    }
        
    //console.log(e.target);
});
于 2021-02-04T09:03:33.273 回答