2009-12-18 82 views
0

我有一系列的div有相似的ID,但最后一个唯一的#除外(cartbtn0,cartbtn1等)。我创建了一个通用函数,它可以使用通配符在所有div上工作,但我需要能够捕获被单击的div的唯一编号,以替换#cartbox0:hidden中的0。任何人都可以帮忙吗?传递div信息

示例代码:

$("*[class^=cartbtn]").click(function() { 
    $(this).hide(); 
    $('#cartbox0:hidden').fadeIn(2000); 
}); 

<div id="cartbtn0" class="cartbtn0">.....</div> 
<div id="cartbox0>" class="cartbox0" style="display:none;">.....<div> 

<div id="cartbtn1" class="cartbtn1">Text</div> 
<div id="cartbox1>" class="cartbox1" style="display:none;">Text<div> 
+0

您在该代码段中似​​乎有无效的ID。例如,您的前两个div是'cartbtn0'和'cartbox0>'。后者是无效的,你不能在ID中使用'>':http://www.w3.org/TR/html401/types.html#type-name – 2009-12-18 08:29:52

回答

0

我假设你是动态创建这些div。如果是这种情况,你可以添加一个属性给他们,它包含了数字。然后,您可以在点击时访问该属性,并将其附加到课程末尾。这将使您不必操作类名字符串。

$("*[class^=cartbtn]").click(function() { 
    $(this).hide(); 
    var num = $(this).attr('ref'); 
    $('#cartbox'+num+':hidden').fadeIn(2000); 
}); 

<div id="cartbtn0" class="cartbtn0" ref="0">.....</div> 
<div id="cartbox0" class="cartbox0" ref="0" style="display:none;">.....<div> 

<div id="cartbtn1" class="cartbtn1" ref="1">Text</div> 
<div id="cartbox1" class="cartbox1" ref="1" style="display:none;">Text<div> 
+0

如果你打算给元素添加属性,最好使用'data-'前缀。向元素添加任意属性一直与HTML规范相反(尽管实际上被浏览器容忍),从而导致验证问题。但* finally *,在HTML5中,我们得到了'data-'前缀,这基本上意味着“以下内容不在规范中,请不要担心”。例如'data-ref'。现在就可以工作,并且会验证HTML5验证程序是否正常工作。 – 2009-12-18 10:09:44

+0

对。很高兴知道。谢谢。 :) – munch 2009-12-18 10:48:53

0

您可以使用:

this.id 

点击处理程序中。

0

为了避免操纵字符串(当然你可以做$(this).attr('id').substring(...),我说你最好的选择是做:

$(this).find(':hidden').fadeIn(2000); 

这会给你点击的div,如果是隐。虽然我不太明白为什么你会想要搜索,因为你总是在之前隐藏它。

0

尝试

$('#' & this.id.replace('cartbtn','cartbox') + ':hidden').fadeIn(2000); 

,而不是

$('#cartbox0:hidden').fadeIn(2000); 

应该采取的股利,并更换名称。