如何将事件限制为jQuery集合中的单个元素?
在下面的情况下,我尝试使用.one()将行为(将< li class ='close'>关闭< / li>行)插入到单个实例.该行为的确只发生一次,但是每个匹配的元素$(“ul> li> a”).如何让它只发生一次,只有一个集合中匹配的元素?
有任何想法吗?
$( "ul>li>a" ).one( "click",function(){ $( "ul ul") .prepend("<li class='close'>Close</li>") } );
提前致谢.
-如
解决方法
jQuery选择返回一个数组.因此$(“选择”)[0]可以工作.然而,有更好的抽象方法,如.get(0)或.first()(如果你正在寻找选择/数组的第一个元素).
$(“selection”).get(index)返回选择的纯DOM元素(在该特定索引处),并且不包含在jQuery对象中.
$(“selection”).first()返回选择的第一个元素,并将其包装在一个jQuery对象中.
所以如果你不需要返回第一个元素,但仍然需要jQuery的功能,你可以做$($(“selection”).get(index)).
鉴于你的情况,这应该是正常的:
// bind the 'onclick' event only on the first element of the selection $( "ul>li>a" ).first().click(function() { $( "ul ul").prepend("<li class='close'>Close</li>"); });
这相当于这个:
$($( "ul>li>a" ).get(0)).click(function() { $( "ul ul").prepend("<li class='close'>Close</li>"); });
和这个:
$($( "ul>li>a" )[0]).click(function() { $( "ul ul").prepend("<li class='close'>Close</li>"); });
我必须不同意Ryan,与CSS本身的JavaScript数组功能相比,CSS选择字符串的过滤结果相当昂贵.