2012-11-15 34 views
0

任何想法当相关输入字段被聚焦/模糊时,我只能从每个列表项中显示/隐藏孩子的'.link'。jQuery在动态列表中只显示/隐藏孩子

类似以下内容,但我不确定如何应用(this)它?

$('.input').focus(function() { 
    $('li').next('.link').show(); 
}); 

$('.input').blur(function() { 
    $('li').next('.link').hide(); 
}); 

标记:

<ul> 
    <li> 
    <input class="input" value="1"> 
    </li> 

    <li"> 
    <a class="link" href="#"></a>   
    </li> 
</ul> 

<ul> 
    <li> 
    <input class="input" value="2"> 
    </li> 

    <li> 
    <a class="link" href="#"></a>   
    </li> 
</ul> 
etc. 

回答

1

以下假定您的标记的结构不会改变。您可以使用.parent()获取父元素.next()以获取以下兄弟元素,并使用.children()获取子元素。你既可以事件处理程序合并成一个,并通过委派事件处理程序越往上DOM树提高效率:

$("ul").on("focus blur", ".input", function (e) { 
    var method = e.type === "focusin" ? "show" : "hide"; 
    $(this).parent().next().children(".link")[method](); 
}); 

注意,事件类型检查,寻找focusin - jQuery的出现实际上绑定到focusinfocusout而不是focusblur

+0

工作得很好,非常感谢。 http://jsfiddle.net/jjgh3/ – Jamie

1

如果你的结构肯定是如上,那么你可以简单地使用父母和未来......

$('.input').focus(function() { 
    $(this).parent().next().find(".link").show(); 
}); 

$('.input').blur(function() { 
    $(this).parent().next().find(".link").hide(); 
}); 
+0

我不能得到这个工作? http://jsfiddle.net/ZK877/ – Jamie

+0

首先,我解决了我的学生错误(我显示,而不是隐藏!),并修复了你与jsFiddle的错误(它不是相同的代码 - 没有父母选择器 - 而你在mootools上使用它,而不是jQuery),这里是工作版本... http://jsfiddle.net/ZK877/1/ – Archer

+0

很酷!欢呼声; ) – Jamie