JQuery美元.包含总是返回false的方法

JQuery $.contains method always returning false

本文关键字:false 方法 返回 美元 包含总 JQuery      更新时间:2023-09-26

我在这部分JQuery代码中遇到了一个问题:

$(".roomblock_slots li").droppable({ activeClass: "drop_here", hoverClass: "hover_here", tolerance: "pointer",
        drop: function (event, ui) {
            var container = $(this);
            if (container.contains(container,"div")) {
                return false;
            }
            return true;
        } });

我试图将一个元素放入一个li元素,我想检查它是否包含一个div元素。问题是,函数本身总是返回false,并且永远不会进入"return false;",即使li包含div元素,如:

<li class="ui-droppable">
    <div class="ui-draggable">
</li>

如何解决这个问题?

实用程序方法$.contains不像您期望的那样工作。

http://api.jquery.com/jQuery.contains/

它接受的参数是:containercontained,您可以这样使用它:

$.contains(container, contained)

两个参数都应该是DOM元素…而不是jQuery对象或选择器

所以在您的情况下,因为您没有寻找包含在另一个特定元素中的特定元素,所以您不能使用$.contains -您必须使用另一种方法。

我建议使用.find并计算有多少匹配:

if (container.find("div").length > 0) {
}

当然,如果您只想查看直接子节点,请使用:

if (container.children("div").length > 0) {
}

链接时,您将做:

if ( container.has('div') ) {...}