仅从更多元素中获取唯一名称

Posted

技术标签:

【中文标题】仅从更多元素中获取唯一名称【英文标题】:Get only unique names from more elements 【发布时间】:2012-12-16 06:35:08 【问题描述】:

我已动态呈现 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" />     

检查无线电不是必需的,因此使用 selected 或 checked 属性将不起作用。

有没有一种优雅的方法可以使用 jQuery 获取收音机的所有唯一名称? 我知道我可以遍历每个收音机,但我希望 jQuery 有更优雅的方式来做到这一点?

【问题讨论】:

【参考方案1】:

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

【讨论】:

这真的很接近,所以我将其标记为答案。我不得不使用 $.inArray() 因为 IE8 不支持 arr.indexOf()。谢谢!【参考方案2】:
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/

【讨论】:

【参考方案3】:

要获得唯一的名称,您可以使用map() 构建一个包含所有名称的数组,然后将$.grep() 与$.inArray() 组合以删除重复项。

类似:

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

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

【讨论】:

【参考方案4】:
$('input:radio').each(function()
    // do something
 );

【讨论】:

谢谢 - 当然这将允许我做循环方式,但我真的在寻找一个选择器,它会给我所有收音机的名称。使用上面的循环是不合适的,因为我必须获取每个名称,查看它是否已经存在,然后(如果不存在)添加它。【参考方案5】:

仅供参考 - 您发布的 html 没有唯一名称。每个都有两个...但这是您获得它们的方法:

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

【讨论】:

如果他需要唯一的名称,我想他可以只使用 value 属性并将其附加到 name 属性中。【参考方案6】:

如果您想在每个 radio 之前使用 print those names,请使用它:

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

试试小提琴:http://jsfiddle.net/teLjg/

【讨论】:

【参考方案7】:

只需尝试循环并获取所有名称并将其存储在一个数组中...然后通过使用过滤器方法您可以过滤唯一值....

说吧,

var array=[your array values];

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

这可能行得通...

【讨论】:

【参考方案8】:

首先获取radio项的节点列表:

const radios = document.querySelectorAll("input[type="radio"])

然后得到一个名字的数组,然后把它们组成一个集合,一个集合根据定义只包含唯一的条目:

const nameSet = new Set(Array.from(radios).map( el => el.name))

【讨论】:

【参考方案9】:

我认为你们这么快,并且喜欢 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);
);​

或者您可以使用 .not(":odd") 并检查数组是否具有名称的值。 ;)

【讨论】:

以上是关于仅从更多元素中获取唯一名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中仅从 lat, long 获取 City, State, Country

仅从 MediaWiki 中的子页面 url 获取页面名称

读取包含二维矩阵的 .txt 文件,fscanf 仅从 .txt 文件中获取第一个数据元素

仅从 MySql 中最近的比赛中获取玩家的总得分

需要使用Jquery按元素名称获取标签名称[重复]

从 pyspark 中的数据框数组类型列中获取“名称”元素