【问题标题】:getting the names of elements in JS/jQuery获取 JS/jQuery 中元素的名称
【发布时间】:2011-02-21 00:36:22
【问题描述】:

我有一些这样的复选框输入:

<input type="checkbox" name="1" class="filter"/>
<input type="checkbox" name="2" class="filter"/>
...etc...

我正在尝试编写一个函数,只要选中一个复选框,它就会生成一个所有名称连接在一起的字符串。这是我目前所拥有的:

$('.filter').click(function(event){
    var filters = $('.filter').toArray();
    var fstr = "";
    for (f in filters)
    {
        fstr = fstr+","+f.name;
    }
    alert(fstr);
});

不过,名称一直显示为“未定义”(即警报返回 ,undefined,undefined,undefined,undefined,undefined,undefined)。如何访问这些名称?

【问题讨论】:

    标签: javascript jquery namespaces


    【解决方案1】:

    这是如何完成的:

    $('.filter').click(function (event)
    {
        var fstr = '';
        $('.filter[name]').each(function ()
        {
            fstr += ',' + $(this).attr('name');
        });
        alert(fstr);
    });
    

    【讨论】:

    • 谢谢!我试图找出正确的 jquery 语法,更重要的是这个确实有效:)
    • 没有.name() 方法,你必须像任何其他属性一样获取名称,使用.attr()。你可能见过.val() 的使用,但这是一个特殊的函数,主要用于获取表单元素的逻辑值。
    【解决方案2】:

    您可以使用.map() 来获取您想要的东西,如下所示:

    $('.filter').click(function(event){
      var names = $('.filter').map(function () { 
        return $(this).attr("name"); 
      }).get().join(',');
      alert(names);
    });
    

    如果您想要一个仅包含选中项的列表,只需将 $('.filter') 更改为 $('.filter:checked')

    【讨论】:

      【解决方案3】:
      $('.filter').click(function(event){
          var filters = $('.filter').toArray();
          var fstr = "";
          for (f in filters)
          {
              fstr = fstr+","+filters[f].name;
          }
          alert(fstr);
      });
      

      你为什么要那样做?

      $('.filter').click(function(event){
          var str = '';
      
          $('.filter').each(function () {
             str += $(this).attr('name') +",";
          });
      
          alert(str);
      });
      

      【讨论】:

        【解决方案4】:
        (function($filters) {
            $filters.click(function(event) {
                var filters = $filters.toArray();
                var fstr = [];
                for (var i = filters.length - 1; i > -1; --i) {
                    fstr.push(filters[i].name);
                }
                fstr = fstr.join(",");
                alert(fstr);
            }
        })($('.filter'));
        

        【讨论】:

          【解决方案5】:

          试试$(f).name

          【讨论】:

            【解决方案6】:

            $(elem).attr("name")怎么样?

            【讨论】:

            • elem 我的意思是任何元素。所以在这种情况下你会使用$(f)... - 仍然未定义?
            • 他使用的是for inf 只是属性的键,而不是值。
            【解决方案7】:

            我认为转换为数组是你的问题,试试:

            var filters = $('.filter');
            for(var nI = 0; nI < filters.length; nI++)
            filters.eq(nI).attr('name');
            

            【讨论】:

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