如何将事件限制为jQuery集合中的单个元素?

在以下情况下,我尝试使用.one()将行为(插入HTML的<li class='close'>Close</li>行)限制为单个实例。该行为确实仅发生一次,但是在$( "ul>li>a" )的每个匹配元素上都发生。如何使它仅发生一次,仅出现在集合中一个匹配的元素上?

有任何想法吗?

$( "ul>li>a" ).one(
 "click",
 function(){
  $( "ul ul")
  .prepend("<li class='close'>Close</li>")
 }
 );

提前致谢。

-作为

最佳答案

jQuery选择返回一个数组。因此,$("selection")[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,与本地JavaScript数组功能相比,使用CSS选择字符串来过滤结果的成本相当高。

关于javascript - 在jQuery集合中仅选择一个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2147437/

10-12 12:38
查看更多