在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