4

我有许多UL与li。不同的UL将具有相同ID李:Jquery检查是否存在ul中的id与id =

<ul> 
<li id='1'>this</li> 
<li id='2'>that</li> 
</ul> 

<ul> 
<li id='1'>this</li> 
</ul> 

用户可以从列表里拖动到另一个,但只有当具有相同id李不存在。到目前为止,我有这样的:

$(".container").droppable({ 
     drop: function (event, ui) { 
      var a = $(this).find("li").attr("id", $(ui.draggable).attr('id')); 
      if (a.length == 0) { 
       $.ajax({ 
        ... 
       }); 
      }     
     } 
    }); 

但是,当我放弃可拖动它将所有李的id更改为被删除li的值。

任何指导都会很棒。谢谢。

回答

1

使用attr(),你实际上是通过设置您的通话find()匹配任何元素的id属性。您应该在您所匹配的ID上使用find

$(".container").droppable({ 
    drop: function (event, ui) { 
     var a = $(this).find("#" + $(ui.draggable).attr('id')); 
     if (a.length === 0) { 
      $.ajax({ 
       ... 
      }); 
     }     
    } 
}); 

另外,正如@Diodeus提到的,ID不应该以数字开头。他们也应该是独特的文件范围,所以如果你需要重复/期望的ID,我会建议使用不同的属性,如HTML5数据属性:http://ejohn.org/blog/html-5-data-attributes/

+0

谢谢,我需要知道 – abarr 2011-04-14 10:37:02

7

ID不能以数字开头,并且必须是唯一的。对于非唯一标识符,请使用类。

您可以检查,看看是否存在这样一个元素:

if($('#myDIV').length) { 

} 
+0

Diodeus,我只想检查一个列表可丢弃的容器)并非整个页面 – abarr 2011-04-13 13:10:54

+1

@abarr - Diodeus意味着您无法在页面上复制ID。见http://www.w3.org/TR/html40/struct/global.html#h-7.5.2 – 2011-04-13 13:16:22