在jQuery中select当前元素

我有这样的HTML代码:

<div> <a>Link A1</a> <a>Link A2</a> <a>Link A3</a> </div> <div> <a>Link B1</a> <a>Link B2</a> <a>Link B3</a> </div> 

当用户点击HTML上面的链接时,我想获取相应的<a>元素的jQuery对象,然后操作其兄弟。 除了为每个<a>元素创build一个ID,并将该ID传递给一个onclick事件处理程序之外,我想不出任何其他方法。 我真的不想使用ID。

有什么build议么?

幸运的是,jQueryselect器允许你更多的自由:

 $("div a").click( function(event) { var clicked = $(this); // jQuery wrapper for clicked element // ... click-specific code goes here ... }); 

…将指定的callback附加到包含在<div>中的每个<a>

当jQuery click事件调用你的事件处理程序时,它将“this”设置为被点击的对象。 为了把它变成一个jQuery对象,只需将它传递给“$”函数: $(this) 。 所以,例如,为了得到下一个兄弟元素,你可以在click处理程序中执行这个操作:

 var nextSibling = $(this).next(); 

编辑:在阅读凯文的评论后,我意识到我可能会误解你想要什么。 如果你想要做他所要求的,也就是select其他div中的相应链接,你可以使用$(this).index()来获得点击链接的位置。 然后,你可以select其他div中的链接,例如“eq”方法。

 var $clicked = $(this); var linkIndex = $clicked.index(); $clicked.parent().next().children().eq(linkIndex); 

如果你希望能够两种方式,你需要一些方法来确定你在哪里,所以你知道如果你需要“parent()”之后的“next()”或“prev()”

你会发现在这里有用的兄弟()和父()方法。

 // assuming A1 is clicked $('div a').click(function(e) { $(this); // A1 $(this).parent(); // the div containing A1 $(this).siblings(); // A2 and A3 }); 

将这些方法与andSelf()结合起来可以让你操纵你想要的任何组合。

编辑:关于Shog9的回答,Mark留下的关于事件代表团的评论是非常好的。 在jQuery中完成这个最简单的方法是使用live()方法。

 // assuming A1 is clicked $('div a').live('click', function(e) { $(this); // A1 $(this).parent(); // the div containing A1 $(this).siblings(); // A2 and A3 }); 

我认为它实际上将事件绑定到根元素,但效果是一样的。 它不仅更加灵活,而且在很多情况下也提高了性能。 只要确保阅读文档以避免任何问题。

我认为结合.children()$(this)将只返回所选项目的子项

考虑以下:

 $("div li").click(function() { $(this).children().css('background','red'); }); 

这只会改变点击li的背景

要select兄弟姐妹,你需要像这样的东西:

 $(this).next(); 

所以,Shog9的评论是不正确的。 首先,你需要在div点击函数之外命名variables“clicked”,否则点击发生后会丢失。

 var clicked; $("div a").click(function(){ clicked = $(this).next(); // Do what you need to do to the newly defined click here }); // But you can also access the "clicked" element here