如何找到具有特定类名的最近的上层元素的ID?

时间:2009-05-18 10:59:56

标签: jquery css-selectors

HTML代码:

<div id="1" class="master"></div>
<div id="2" class="slave"></div>
<div id="3" class="slave"></div>

<div id="4" class="master"></div>
<div id="5" class="slave"></div>
<div id="6" class="slave"></div>

让我们说,我们使用$('div')。click()使这些DIV元素可以点击:

$('div').click(function() {
    var el = $(this);
    var master_id = ???;
    alert(master_id);
});

然后,点击带有“slave”类的DIV元素,我们需要用类“master”警告最近的上DIV元素的ID,所以,如果我们点击DIV#5或DIV#6,alert =“4 “(DIV#4),如果DIV#2或DIV#3 - 警告=”1“(DIV#1)。 但是怎么做呢? ;)

2 个答案:

答案 0 :(得分:2)

已更新:

$('div').click(function() {
    var el = $(this);
    var master_id = el.prevAll('.master').attr('id');
    alert(master_id);
});

修改
你也可以使用过滤器,这样当你单击calss'master'的div时,它不会触发事件:

$('div').click(function(e) {
    var el =$(this);
    if (!el.is('.master')){
        var master_id = el.prevAll(".master").attr('id');
    alert(master_id);
    }

答案 1 :(得分:0)

我首先想到prev会这么做,但经过一些测试后,我发现它不会在slave之后直接放在另一个slave之后。从prevAll抓住第一场比赛非常有效。

演示:http://jsbin.com/ulipi

$('.slave').click(function() {
    var el = $(this);
    var master_id = $(el.prevAll('.master').get(0)).attr('id');
    alert(master_id);
});