操纵众多其中之一?

操纵众多其中之一?

问题描述:

我有一些标记,像这样......操纵众多其中之一?

<div id="items"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 

我想写一些功能影响每一个使用jQuery。像...

$(".item").click(function(i){ 
    i.hide(); 
}); 

有人可以给我一个简单的解释如何使这项工作?我应该使用.each()吗?

它也能工作,而不每个

$(".item").click(function() { 
    $(this).hide(); 
}); 

$('.item').each(function(index){ 
    $(this).bind('click', function(){ 
     $(this).hide(); 
     //alert("hiding item nr: "+index); 
    }); 
}); 
+0

除非我记错了,你不需要'each'因为jQuery自动应用到动作每一个匹配的元素。如果你真的想要遍历元素,你只需要每个元素(例如,如果你想'alert'每个元素,如[每个文档]中的示例所示(http://api.jquery.com/each /))。另外,你不需要'.bind('click',...)';使用'.click(...)'作为OP已经足够,并且更干净。 – mgiuca

+0

是的,我知道。我只是想,也许人们想知道索引。因此警报是作为评论。绑定('点击',...我使用更好的可读性的原因...我不这样做,因为昨天mgiuca :-) – helle

您想在处理函数中使用$(this)而不是i。该处理程序的参数是event object,其中包含有关该事件的信息(例如鼠标坐标所在的位置以及其他内容)。可能在i的某处是被点击的对象,但您可以使用this更容易地访问“无论哪个对象被点击”。

您不必使用each,因为jQuery自动将处理程序绑定到由查询".item"匹配的每个元素。

$(".item").click(function(i){ 
    $(this).hide(); 
}); 

编辑:新增$(...)各地this,如the documentation指示。 (出于某种原因,它的工作对我来说没有$,但显然你需要它。)

+2

我不能只''这个工作,只有'$ (this)' – fancy

+0

@float嗯,它对我很有用,但文档说你是正确的,所以我改变了我的答案。 – mgiuca

+1

这是不可能的,它没有使用$(),导致'div'没有原生的'hide()'方法 –

你可以做到这一点:)

$(".item").live('click',function(){ 
    $(this).hide(); 
}); 
+0

任何你将'click'(或等价的'bind')改成'live'的原因?这改变了行为('live'使得它会自动绑定到将来匹配该选择器的任何东西),所以你应该有一个很好的理由来做到这一点。 – mgiuca

+0

你也不需要'this'附近的'$(...)'('this'已经是一个jQuery对象)。 – mgiuca

+0

其实,忽略我所说的$。我不知道它是如何工作的,但它显然不适用于其他人,并且[文档告诉你](http://api.jquery.com/bind)显式包装$。 – mgiuca

是的,你可以使用每个,像这样:

$(".item").each(function(){ 
    //Here, use $(this) to reference current element 
    $(this).hide(); 
}); 

.each()将您传递给匹配选择器中每个元素的函数应用到当前元素的this

它有可选的参数和其他东西。在这里你可以了解更多:http://api.jquery.com/jQuery.each/

希望这会有所帮助。干杯

+0

这将隐藏每个项目,而不是像问题中的代码试图执行的那样在每个项目上设置单击事件处理程序。 – mgiuca

(a)文档清楚了解事件处理程序的作用。 (b)和大多数jquery方法一样(例外情况全部明确说明它们是例外情况),.click将应用于由jquery对象选择的每个集合的成员。所以,不,你不需要使用.each,如果你想让他们每个人都安装与事件处理程序相同的功能。

(c)thisevent.currentTarget(或在您的示例中,i.currentTarget)是访问作为事件接收方的dom节点的方式。你的例子中的i将是事件对象。

这有希望做你想做的。让我们知道这是否有效,希望有所帮助。

$(".item").each(function(){ 
    $(this).click(function() { 
     $(this).hide(); 
    }); 
});