Jquery在dom中找到具有相同类的prev元素

时间:2012-05-19 16:12:31

标签: jquery dom-traversal

关于高级jQuery的另外一个问题

当我点击具有相同类的元素时,我想找到一个带有类的dom元素,例如abc。现在搜索应该是前一个元素。

我编写的代码:

$(this)
    .closest('.abc')
    .parent()
    .prevAll()
    .find('.abc')
    .first()
    .triggerHandler("focus");

这是回顾父母的前一个dom并搜索abc,但是如果类'abc'在前一个dom中不存在,我想搜索直到找到abc,同时尝试使用junery的prevuntil仍然没有运气。

如果有人可以帮助我,非常感谢。

2 个答案:

答案 0 :(得分:5)

您可以使用它来获取前一个元素:

var $current = $(this); //the element you have
var $elems = $('.abc'); //the collection of elements

var $previous = $elems.eq($elems.index($current) - 1); //the one you needed

我不会说这是最有效的代码,但是如果不知道DOM树,那就是我能想到的最好的代码。如果您只在DOM可能已更改且仅使用缓存版本($('.abc'))时重新运行$elems,则应该没问题。

答案 1 :(得分:2)

这是一种快速而又肮脏的方式:

$('.abc').click(function(){
    var clicked = this;
    var last;
    // Go though all elements with class 'abc'
    $('.abc').each(function(){
        if(this == clicked) return false;
        last = this;
    });
    if(last) $(last).triggerHandler("focus");
});