2013-04-02 101 views
1

我在這裏有一個問題與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,從來沒有進入「返回false;」,即使李包含一個div元素,像這樣:

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

我該如何解決這個問題?

+0

'container.has('div')' – adeneo

回答

3

實用方法$.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) { 

} 
+0

是的。它聲明如下:如果第二個參數提供的DOM元素是第一個參數提供的DOM元素的後代,那麼$ .contains()方法返回true。 – Sefam

+0

所以我很想知道爲什麼它不起作用。另外,我早些時候嘗試了$ .find()。忘記我需要特別檢查長度。非常感謝! – Sefam

+0

@Sefam我剛剛編輯,希望有一個解釋,幫助。問題出在'$ .contains'方法接受的參數 – Ian

2

鏈接時,你會做:

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

您無法將選擇器作爲第二個參數傳遞。它只接受這兩個參數的DOM元素。 – Ian

+0

@lan - 看起來像你*可以*在'.has'中傳遞一個選擇器:http://jsfiddle.net/DerekL/j2tcL/ –

+1

@Derek朕會功夫 - 評論是在包含'$ .contains',我刪除了它,因爲它不是真正適合使用的方法。 has()'是適當的方法! – adeneo