2011-06-15 63 views
4

我正在循环显示一个表单并显示与我选择的ID匹配的内容。问题是一些div包含多个id,在这种情况下它停止工作。有任何想法吗?谢谢。当元素有多个ID时匹配

jQuery代码:

$('#myForm').find('div').each(function() { 
     var myId = $(this).attr('id'); 

     /* This will work */ 
     if (myId == "Select1"){ 
       $(this).removeClass("hideMe"); 
       $(this).addClass("showMe"); 
       } 
     /* This does not work */ 
     else if (myId == "Select4"){ 
       $(this).removeClass("hideMe"); 
       $(this).addClass("showMe"); 
       } 
     else{} 

     }); 

HTML代码:

<div class="hideMe" id="Select1"> 
<p>Some Content</p> 
</div> 

<div class="hideMe" id="Select2 Select3 Select4 Select5"> 
<p>Some Content</p> 
</div> 
+4

我会第一个说,WTF – Jason 2011-06-15 21:19:20

+0

问题是divs不能有多个ID。看到这个问题:http://stackoverflow.com/q/192048/206403 – 2011-06-15 21:19:29

+0

根据规范,一个'id'不能包含空格。所以你的HTML无效。如果你做了无效的HTML,这意味着从现在起发生的所有事情都是未定义的行为。而且,嘿,这种行为在浏览器中可能会有所不同。所以首先修复你的HTML。 – 2011-06-15 21:19:39

回答

10

有 “多IDS” 没有这样的事。

https://developer.mozilla.org/en/XUL/Attribute/id

根据标准,该id属性内的任何字符串数据被视为值的一部分。

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".")

参考:http://www.w3.org/TR/REC-html40/types.html#type-name

还有另外一种方式,但!你可以有各种各样的类名,你可以使用jQuery通过类名来获取元素。

HTML

<div class="hideMe Select1"> 
<p>Some Content</p> 
</div> 

<div class="hideMe Select2 Select3 Select4 Select5"> 
<p>Some Content</p> 
</div> 

的Javascript

$('.Select2')[0] 

的是,[0]部分是因为当你通过类名的元素,有可以是几个。 jQuery选择器返回一个数组,所以你只是抓住第一个。

+1

对于它的价值 - 不要使用冒号或圆点,因为它不可能为元素编写普通的选择器。 #id.something将'something'视为一个类,#id:将某物视为伪选择器。 – Beejamin 2011-06-15 21:22:37

1

您不能有多个ID。但是,如果您愿意,您可以拥有多个课程。

0

ID是独特和元素只能有1 ID

改为使用多个类。

0

一个元素不应该有多个唯一的标识符,这就是为什么它实际上被称为一个ID:要辨别所有其他元素。无论如何,您必须测试myId是否包含Select4,而不是测试相等性。

相关问题