2013-01-01 27 views
4

我已動態呈現HTML,其中列出了未定數量的單選按鈕,其名稱代表數據庫中的某些ID。從更多元素中獲取唯一名稱

我需要收集收音機的所有獨特名稱。

下面是一個例子:

<input name="721" type="radio" value="A" />   
<input name="721" type="radio" value="I" />  

<input name="722" type="radio" value="A" />   
<input name="722" type="radio" value="I" />  

<input name="723" type="radio" value="A" />   
<input name="723" type="radio" value="I" />  

檢查無線電設備不是必需的,所以使用選擇的或檢查屬性將不起作用。

是否有一個優雅的方式來獲得使用jQuery收音機的所有獨特的名稱? 我知道我可以循環播放每一個收音機,但我希望jQuery有一個更優雅的方式來做到這一點?

回答

6

jsBin demo

var arr = []; 

$.each($('input:radio'), function(){ 

    var myname= this.name; 
    if($.inArray(myname, arr) < 0){ 
    arr.push(myname); 
    } 

}); 

alert(arr); // 721,722,723 
+1

這非常接近,所以我會將其標記爲答案。我不得不使用$ .inArray(),因爲IE8不支持arr.indexOf()。謝謝! – richb01

+0

@ richb01哦,當然,我會編輯我的答案來改進它。 thx –

0
$('input:radio').each(function(){ 
    // do something 
}); 
+0

謝謝 - 確定這會讓我做循環的方式,但我真的在尋找一個能給我所有收音機名稱的選擇器。使用上面的循環是毫無意義的,因爲我必須得到每個名字,看它是否已經存在,並且(如果沒有)然後添加它。 – richb01

0

僅供參考 - 您發佈的html沒有獨特的名稱。還有每兩個...但是這是你可以讓他們:

$('input[type="radio"]').each(function() { 
    alert($(this).attr('name')); 
});​ 
+0

我想如果他需要唯一的名字,他可以將value屬性添加到name屬性中。 – erversteeg

0

如果你把每radio之前要print those names然後使用它:

$('input[type="radio"]').each(function() { 
    $(this).before($(this).attr('name')); 
});​ 

試一下小提琴:http://jsfiddle.net/teLjg/

1
var names = $('input[type=radio]').map(function() { 
    return this.name 
}).get(); // create an array of names 

var unique = $.grep(names, function(v, i) { 
    return $.inArray(v, names) === i 
}); // filter unique values 

http://jsfiddle.net/WnHvz/

+0

這也適用。謝謝。 – richb01

0

要獲得唯一的名稱,你可以使用map()建立的所有名稱的數組,然後用$.inArray()結合$.grep()刪除重複。

喜歡的東西:

var allNames = $("input[type=radio]").map(function() { 
    return $(this).attr("name"); 
}).get(); 

var uniqueNames = $.grep(allNames, function(name, index) { 
    return $.inArray(name, allNames) == index; 
}); 
0

只要設法環通,並得到所有的名字,並將其存儲在一個數組...然後用過濾法可以篩選唯一值....

讓說,

var array=[your array values]; 

var unique_val = array.filter(function(value,iter,array){ 
    return iter == array.indexOf(value); 
}); 

這可能會實現...

-1

我覺得你人這麼快一呃愛jQuery,呵呵。 這可能會幫助你,在2個單選按鈕的情況下, http://jsfiddle.net/BTcrR/檢查了這一點

$(function() { 
    // list of 
    var rediobuttonsName = new Array(); 
    // you can use :odd | :even 
    $('input[type="radio"]').not(':odd').map(function(n, elem) { 

     rediobuttonsName.push(elem.name); 
     // or you can use the context of object this 
     // this.name 

    }); 

    alert(rediobuttonsName); 
});​ 

,或者你可以得到的。不是(「:奇」)的平順性和檢查數組,如果它有值名字。 ;)