选择器在我已经获得的无线电列表中获取已检查的无线电

时间:2012-03-01 00:07:04

标签: jquery jquery-selectors

我想要做的总结:我有一个无线电盒的列表(我使用jquery选择器得到它),我想获得在该列表中检查的那个而不再评估第一个选择器。例如:

var radioBoxes = $(this).parent().find(":radio");
if (radioBoxes.length > 0)
{
    var radioBoxValue = $(this).parent().find(":radio:checked");
    //Do something with checked radio value
}
else
{
    //I found no radio so to something else
}

那么我可以在 radioBoxes 上运行任何选择器来获取已检查的电台吗?

如果您想了解更多细节,请点击此处。 我已经实现了一个控件,其中包含一些复选框,这些复选框附近有一个单选按钮列表:

    [x] Java   ( )1  (x)2  ( )3
    [x] Ajax   ( )1  ( )2  ( )3

但在同一个控件中,我也有复选框,附近没有收音机:

    [x] Developper / Programmer
    [ ] Technical Analyst

我想避免做以下事情:

$(':checkbox').click(function(){
    if ($(this).parent().find(":radio").length > 0)
    {
        //I am a checkbox who has radios near to me,
        //I want to known which radio is checked if any
        var value = $(this).parent().find(":radio:checked").val();
        //...
    }
    else
    {
        //I am a checkbox who has no radio near to me
        //...
    }             
});

因为我不喜欢评估两者

$(this).parent().find(":radio")

$(this).parent().find(":radio:checked")

我想要像:

$(':checkbox').click(function(){
    var radioBoxes = $(this).parent().find(":radio");
    if (radioBoxes.length > 0) 
    {
        var value = radioBoxes.has(":checked");
        //...
    }
    else
    {
        //...
    }
});

但这不起作用。

有人知道jquery中是否存在这样的功能吗?

2 个答案:

答案 0 :(得分:2)

您可以在现有元素集合上使用.filter(“:checked”):

var radios = $(this).parent().find(":radio");

if (radios.length > 0)
{

    var value = radios.filter(":checked").val();
    //...
}

有关过滤方法的详情,请访问:http://api.jquery.com/filter/

答案 1 :(得分:0)

问题解决了:正如rjz所建议的那样,它只需要filter()函数:

$(':checkbox').click(function(){
    var radioBoxes = $(this).parent().find(":radio");
    if (radioBoxes.length > 0) 
    {
        var value = radioBoxes.filter(":checked").val();
        //...
    }
    else
    {
        //...
    }
});