0

我想更改列表中的所有元素,但单击的元素除外。我想我需要确定实际点击了什么,然后改变它的兄弟姐妹?如何找到点击了哪个元素?

<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');
});
4

5 回答 5

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
});​
于 2012-11-27T16:00:04.490 回答
0

试试这个:

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

示例小提琴

于 2012-11-27T16:03:08.107 回答
0

假设每个 a 标记对于 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));
于 2012-11-27T16:04:12.000 回答
0

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

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

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

于 2012-11-27T16:06:55.840 回答
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');
});​
于 2012-11-27T16:28:25.453 回答