2013-04-02 4 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; 
     } }); 

Я пытаюсь бросить элемент в литии элемент, и я хочу, чтобы проверить если он содержит элемент div. Проблема в том, сама функция всегда возвращает ложь и никогда не переходит в «возвращение ложным;», даже если литий содержит Div элемент, как это:

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

Как решить эту проблему?

+0

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

ответ

3

Полезный метод $.contains не работает, как вы ожидаете.

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

параметры он принимает являются: container и contained, и использовать его как:

$.contains(container, contained) 

Оба параметра должны быть DOM элементы ... не объекты JQuery или селекторы.

Таким образом, в вашем случае, поскольку вы не ищете определенный элемент, содержащийся в другом конкретном элементе, вы не можете использовать $.contains - вы должны использовать другой метод.

Я предложил бы использовать .find и подсчитывать, сколько матч:

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

} 

Конечно, если вы хотите взглянуть на непосредственных детей, использование:

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

} 
+0

Да. В нем указано следующее: Метод $ .contains() возвращает значение true, если элемент DOM, предоставленный вторым аргументом, является потомком элемента DOM, предоставленного первым аргументом. – 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

Смежные вопросы