选择除$(this)

时间:2015-10-13 18:33:18

标签: jquery jquery-selectors this

我有以下代码

$('.radio-box').click(function() {
    $(this).parents('.container-radio-box').find('.select').removeClass('state-active');
}

我试图获取它,以便找到点击的.radio-box元素,查找包含元素的内容 - .container-radio-box - 然后从任何.select中删除活动状态里面的元素。

我有一种感觉,我可以使用

的内容
$('.radio-box').not(this).each(function() {

然而,它有点复杂,因为有许多.container-radio-box元素,它们都需要单独处理。例如。只有被点击的.select的包含div中的.radio-box元素才能被脚本修改。

有谁知道我怎么做到这一点?

修改 我像这样修改了我的脚本:

// radio-box
$('.radio-box').click(function() {

    $(this).parents('.container-radio-box').find('.radio-box').removeClass('state-active');

    var el = this;
        $(this).parents('.container-radio-box')
                .find('.select')
                .filter(function(index){
                    return this != el;
                                })
                .removeClass('state-active');


    $(this).find('input').prop( "checked", true );
    $(this).addClass('state-active');

});

并且还在此处上传了该页面,以便您了解其工作原理 - http://www.mattpealing.co.uk/_concept/brdcr/form/

我正在尝试获取它,以便左列中的.select元素可以保持选中直到选择其他列之一,在这种情况下,活动状态将被删除

但似乎单击左列也会从其中包含的.select元素中删除活动状态

2 个答案:

答案 0 :(得分:1)

让jQuery为您努力工作 - 选择所点击的.radio-box的兄弟姐妹,只搜索其中的.select元素:

$('.radio-box').click(function() {

    // Deselect all radio boxes
    $(this).parents('.container-radio-box').find('.radio-box').removeClass('state-active');

    // Remove active state from inner options in other radio boxes
    $(this).siblings()
        .find('.select')
        .removeClass('state-active');

    // Select this radio box
    $(this).find('input').prop( "checked", true );
    $(this).addClass('state-active');

});

答案 1 :(得分:0)

您可以过滤集合并比较DOM元素:

var el = this;
    $(this).parents('.container-radio-box')
            .find('.select')
            .filter(function(index){
                return this != el;
                            })
            .removeClass('state-active');