2012-07-10 179 views
2

我想为jQuery制作一个基本的验证码模块。我有一个体面的开始,但由于某种原因.children()似乎没有工作。见这里:http://jsfiddle.net/pTbeW/ 我现在有这样的:Jquery .children()不按预期方式工作

$(this).children('.captchain-start').hide(); 
$(this).children('.captchain-show').show(); 

如果我将其更改为

$('.captchain-start').hide(); 
$('.captchain-show').show(); 

它完美的作品。但是这个解决方案并不理想,因为它不允许这个验证码的两个实例在同一个页面上。我怀疑它与查询设置的html有关,但我不知道如何。我远离javascript和jQuery专家,但这似乎是一件相对容易的事情。我错过了什么?我长时间看着它有疲倦的眼睛吗?任何帮助,将不胜感激。

回答

0

您应该使用$(this).nextAll()而不是$(this).children(),因为您要隐藏和显示的元素不是a元素的子元素,而是兄弟元素。

http://api.jquery.com/nextAll/

+0

我无法对其他答案发表评论,但@ rich.okelly解决方案无法正常工作,因为children()和find()都是遍历到后代元素中的,即.captchain -start'和'.captchain-show'不是。 – 2012-07-10 13:54:57

+0

谢谢,这工作完美! – 12345j 2012-07-11 02:36:27

4

因为'.captchain-*'元素不是孩子,而是兄弟姐妹。请尝试以下操作:

$(this).nextAll('.captchain-start').hide(); 
$(this).nextAll('.captchain-show').show(); 
+0

澄清,'.find'通过后代各级搜索,而'.children'只搜索直接后裔(一级)。 – jbabey 2012-07-10 14:06:20

+0

感谢您的建议,但似乎并不奏效。请参阅http://jsfiddle.net/pTbeW/3/ – 12345j 2012-07-11 02:34:29

0
this 

在点击事件引用点击的元素,这与类的captchain启动'的元素。所以,你不必扫描的孩子,你可以使用:

$(this) 

的实际点击的元素或元素选择,而不是

代替。