查找单击的元素更改兄弟姐妹

时间:2012-11-27 15:56:05

标签: jquery

我想更改列表中除了单击的元素之外的所有元素。我想我需要确定实际点击的内容然后更改它的兄弟姐妹?如何找到点击的元素?

<ul>
    <li><h4 class="span1"><a href="#" class="sort" data-sort="ID">ID<i class="icon-arrow-down" aria-hidden="true"></i></a></h4></li>
    <li><h4 class="span2"><a href="#" class="sort" data-sort="Type">Type<i class="icon-arrow-down" aria-hidden="true"></i></a></h4></li>
    <li><h4 class="span3"><a href="#" class="sort" data-sort="Task">Task<i class="icon-arrow-down" aria-hidden="true"></i></a></h4></li>
    <li><h4 class="span8"><a href="#" class="sort" data-sort="Project">Project<i class="icon-arrow-down" aria-hidden="true"></i></a></h4></li>
    <li><h4 class="span3a"><a href="#" class="sort" data-sort="DueDate">Urgency<i class="icon-arrow-down" aria-hidden="true"></i></a></h4></li>
    <li><h4 class="span3 last"><a href="#" class="sort" data-sort="Created">Date Created<i class="icon-arrow-down" aria-hidden="true"></i></a></h4></li>
</ul>
$('.sort').click(function () {
    $(this).data('clicked', true);

    if($(this).data('clicked')) {
        $('i', this).toggleClass('icon-arrow-down').toggleClass('icon-arrow-up');
    } 
    else {
        $('.sort i').siblings().removeClass('icon-arrow-up').addClass('icon-arrow-down');
    }
});

答案:

$('.sort').click(function() {
    $(this).closest('li').siblings().find('i').removeClass('icon-arrow-up').addClass('icon-arrow-down');
    $(this).find('i').toggleClass('icon-arrow-down icon-arrow-up');
});

5 个答案:

答案 0 :(得分:0)

你想做这样的事情:

$('.sort').click(function (e) {
    $('.sort').not(e.currentTarget).css({
        color: 'red'
    });
    return false
});​

这是一个小提琴:http://jsfiddle.net/th3KV/

您的代码:

$('.sort').click(function (e) {

    $(this).find('i').toggleClass('icon-arrow-down icon-arrow-up');

    $('.sort').not(e.currentTarget).each(function(){
        $(this).find('i').removeClass('icon-arrow-up').addClass('icon-arrow-down');
    });
    return false
});​

答案 1 :(得分:0)

试试这个:

$('.sort').click(function() {
    $(".sort i").removeClass('icon-arrow-up').addClass('icon-arrow-down');
    $("i", this).toggleClass('icon-arrow-down icon-arrow-up')
});

Example fiddle

答案 2 :(得分:0)

假设每个标签都是data-sort属性所独有的,如上例所示:

$('.sort').click(function () {

$("ul li").each($.proxy(function(index, item) {
if ($("a", item).data("sort") !== $(this).data("sort") {
  //different element than the one clicked
}
}, this));

答案 3 :(得分:0)

由于$(this)代表点击的锚元素,siblings()无法访问其他li元素。相反,寻找上面两个级别的元素的兄弟姐妹,如下所示:

$(this).parent().parent().siblings().removeClass("foo");

或者更改标记,以便定位li而不是其中包含的锚。

答案 4 :(得分:0)

我认为这相对容易阅读和理解:

$('a.sort').click(function () {
    $("i", this)
        .toggleClass('icon-arrow-down')
        .toggleClass('icon-arrow-up')
        .closest("li")
        .siblings()
        .find("i")
        .removeClass('icon-arrow-up')
        .addClass('icon-arrow-down');
});​