仅从更多元素中获取唯一名称
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