我需要将jQuery.click仅应用于第一级项目。我该怎么做?
这是我的清单:
<ul id="adminMenu">
<li id="A">
<h3><a href="">Item 1</a></h3>
</li>
<li id="B">
<h3>Item 2</h3>
<ul style="display: block;">
<li id="a1"> Sub Item 1 </li>
<li id="a2"> Sub Item 2 </li>
<li id="a3"> Sub Item 3 </li>
</ul>
</li>
<li id="C">
<h3>Item 3</h3>
<ul style="display: none;">
<li> Sub Item 4 </li>
<li> Sub Item 5 </li>
</ul>
</li>
</ul>
这是jQuery
jQuery('#adminMenu > li').click(function(){
alert('test');
});
更新
单击子菜单项时,仅当我单击列表项A,B或C时,警报应不。
解决方案1
这是基于Marcels建议的工作代码。
jQuery('#adminMenu > li > h3').click(function(e) {
var activeUL = jQuery("#adminMenu > li ul:visible");
var activeLI = jQuery("#adminMenu > li ul:visible").parent('li:first');
var clicked = jQuery(this).parent('li:first');
// Close submenu
activeUL.hide('fast');
// Open submenu
if( activeLI.attr('id') != clicked.attr('id') )
clicked.children('ul').show('fast');
});
解决方案2
这是基于Eyelids建议的工作代码。
jQuery('#adminMenu > li').click(function(e) {
var clicked = jQuery(e.target);
// Ensure we're checking which list item is clicked,
// other children should be allowed
if(!clicked.is('li') && clicked.parents('li').length > 0) {
// :first ensures we do not select higher level list items
clicked = clicked.parents('li:first');
}
// If clicked list item is a child of another list item, we'll exit here
if(!clicked.is('#adminMenu > li')) {
return;
}
var activeUL = jQuery("#adminMenu > li ul:visible");
var activeLI = jQuery("#adminMenu > li ul:visible").parent('li:first');
// Close submenu
activeUL.hide('fast');
// Open submenu
if( activeLI.attr('id') != clicked.attr('id') )
clicked.children('ul').show('fast');
});
谢谢你们!如果没有你的帮助,我绝不会做到这一点! :)
答案 0 :(得分:5)
jQuery('#adminMenu > li').click(function(e) {
var clicked = jQuery(e.target);
// Ensure we're checking which list item is clicked,
// other children should be allowed
if(!clicked.is('li') && clicked.parents('li').length > 0) {
// :first ensures we do not select higher level list items
clicked = clicked.parents('li:first');
}
// If clicked list item is a child of another list item, we'll exit here
if(!clicked.is('#adminMenu > li')) {
return;
}
alert('test');
});
如果点击的列表项不是#adminMenu
的直接后代,则更新为退出。
答案 1 :(得分:3)
问题是,您将点击添加到整个LI(包括所有子项等)。您只需要“点击”标签,因此请使用:
jQuery("#adminMenu > li > h3").click(...);
答案 2 :(得分:0)
获取一组元素,其中包含每个匹配元素集的所有唯一直接子元素。
children([expr])
http://docs.jquery.com/Traversing/children
jQuery('#adminMenu').children('li').children('h3').click(function()
{
alert('test');
});
答案 3 :(得分:-1)
jQuery('#adminMenu li:first').