【问题标题】: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 有更优雅的方式来做到这一点?

【问题讨论】:

    标签: jquery button css-selectors radio


    【解决方案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") 并检查数组是否具有名称的值。 ;)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-01-17
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多