【问题标题】:Jquery .children() not working as expectedJquery .children() 没有按预期工作
【发布时间】:2012-07-11 16:31:17
【问题描述】:

我正在尝试为 jQuery 制作一个基本的验证码模块。我有一个不错的开始,但由于某种原因 .children() 似乎不起作用。在这里看到它:http://jsfiddle.net/pTbeW/ 我目前有这个:

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

如果我把它改成

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

完美运行。但是这个解决方案并不理想,因为它不允许这个验证码的两个实例出现在同一个页面上。我怀疑这与查询设置的 html 有关,但我不确定如何。我远非 javascript 和 jQuery 专家,但这似乎是一件相对容易的事情。我错过了什么?看了这么久是不是眼睛都累了?任何帮助将不胜感激。

【问题讨论】:

    标签: javascript jquery forms captcha


    【解决方案1】:

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

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

    【讨论】:

    • 澄清一下,.find 搜索所有级别的后代,而 .children 仅搜索直接后代(一级)。
    • 感谢您的建议,但这似乎不起作用。见jsfiddle.net/pTbeW/3
    【解决方案2】:

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

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

    【讨论】:

    • 我无法评论其他答案,但@rich.okelly 解决方案将不起作用,因为 children() 和 find() 都在遍历后代元素,.captchain-start.captchain-show 不是.
    【解决方案3】:
    this
    

    在您的点击事件中引用被点击的元素,它是具有“captchain-start”类的元素。所以你不必扫描孩子,你可以使用:

    $(this)
    

    用于实际点击的元素或元素选择器

    改为。

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 2019-07-13
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多