【问题标题】:How to get all of the IDs with jQuery?如何使用 jQuery 获取所有 ID?
【发布时间】:2020-01-11 20:29:14
【问题描述】:

我正在尝试收集扇区中的 id 列表(数组)

<div id="mydiv">
 <span id='span1'>
 <span id='span2'>
</div>

$("#mydiv").find("span"); 

给了我一个 jQuery 对象,但不是一个真正的数组;

我可以的

var array = jQuery.makeArray($("#mydiv").find("span"));

然后使用for循环将id属性放入另一个数组中

或者我可以做

$("#mydiv").find("span").each(function(){}); //but i cannot really get the id and assign it to an array that is not with in the scope?(or can I)

无论如何,我只是想看看 jQuery 中是否有一个速记来做到这一点;

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    //但我无法真正获取 id 并将其分配给不在范围内的数组?(或者我可以)

    是的,你可以!

    var IDs = [];
    $("#mydiv").find("span").each(function(){ IDs.push(this.id); });
    

    这就是closures 的魅力所在。

    请注意,当您走在正确的轨道上时,sighohwellcletus 都指出了更可靠和更简洁的方法来实现这一点,利用 attribute filters(将匹配的元素限制为具有 ID 的元素)和 jQuery 的内置map()函数:

    var IDs = $("#mydiv span[id]")         // find spans with ID attribute
      .map(function() { return this.id; }) // convert to set of IDs
      .get(); // convert to instance of Array (optional)
    

    【讨论】:

    • 是的,我没有使用真正的数组,因为从技术上讲,您可以将重复的 ID 放入 html 中,即使这样做完全错误
    • @Deviant: true (虽然如果你这样做,你的 ID 有点没用......)我的例子不适合生产代码的另一个原因是它没有过滤元素- 如果 Roy 有任何没有 ID 的 span,他将在数组中得到空元素。
    • 我使用这个函数只获取唯一变量(拧紧重复的 id,它们在第二次出现时无论如何都不会工作)$.unique($('[id]').map(function() { return this.id; }).get()); 通过将它包装在 $.unique 中,它可以很好地过滤保持你的代码干净:-)
    • 只是补充答案,如果您想使用特定字符串搜索页面中的所有 ID: $('*').each(function(){ if (/^stringhere/g.test( this.id)) { console.log(this.id) } });
    • 请记住 $.unique 不适用于字符串或数字 api.jquery.com/jQuery.unique
    【解决方案2】:

    .get() 方法将从 jQuery 对象返回一个数组。此外,您可以在调用 get() 之前使用 .map 投影到某些东西

    var idarray = $("#myDiv")
                 .find("span") //Find the spans
                 .map(function() { return this.id; }) //Project Ids
                 .get(); //ToArray
    

    【讨论】:

    • 我欠你一个咖啡伴侣!
    【解决方案3】:

    我的建议?

    var arr = $.map($("#mydiv [id]"), function(n, i) {
      return n.id;
    });
    

    你也可以这样做:

    var arr = $.map($("#mydiv span"), function(n, i) {
    

    var arr = $.map($("#mydiv span[id]"), function(n, i) {
    

    甚至只是:

    var arr = $("#mydiv [id]").map(function() {
      return this.id;
    });
    

    基本上有很多方法。

    【讨论】:

      【解决方案4】:

      我能想到的回答这个问题的最好方法是制作一个自定义 jquery 插件来做到这一点:

      jQuery.fn.getIdArray = function() {
        var ret = [];
        $('[id]', this).each(function() {
          ret.push(this.id);
        });
        return ret;
      };
      

      然后做类似的事情

      var array = $("#mydiv").getIdArray();
      

      【讨论】:

        【解决方案5】:

        这是一个迟到的答案,但现在有一个简单的方法。当前版本的 jquery 允许您搜索属性是否存在。例如

        $('[id]')
        

        如果它们有 id,会给你所有的元素。如果您想要所有 id 以 span 开头的跨度,您可以使用

        $('span[id^="span"]')
        

        【讨论】:

          【解决方案6】:

          不是真正的数组,而是objs都是javascript中的关联数组。

          我选择不使用带有 [] 和 [].push 的真实数组,因为从技术上讲,您可以在一个页面上拥有多个 ID,即使这样做是不正确的。所以只是另一种选择,以防某些 html 重复 ID

          $(function() {
          
                 var oArr = {};
                 $("*[id]").each(function() {
                     var id = $(this).attr('id');
                     if (!oArr[id]) oArr[id] = true;
                 });
          
                 for (var prop in oArr)
                     alert(prop);
          
             });
          

          【讨论】:

            【解决方案7】:

            HTML

            <div id="mydiv">
             <span id='span1'>
             <span id='span2'>
            </div>
            

            jQuery

            var IDs = [];
            $("#mydiv").find("span").each(function(){ IDs.push($(this).attr("id")); });
            

            【讨论】:

            • 尝试在你的答案中添加一些解释性文字。
            【解决方案8】:

            您可以获取特定标签的 id 并将其发送到另一个元素。例如:

            $("input").map(function() {
                $( "textarea" ).append(this.id+"\n");
            });
            

            它将获取所有输入的 id 并将其发送到 textarea。

            【讨论】:

              【解决方案9】:
              for(i=1;i<13;i++)     
              {
              
                 alert($("#tdt"+i).val());  
              
              }  
              

              【讨论】:

                猜你喜欢
                • 2015-08-12
                • 2013-02-19
                • 1970-01-01
                • 2013-03-22
                • 1970-01-01
                • 1970-01-01
                • 2011-04-22
                • 2013-05-10
                • 1970-01-01
                相关资源
                最近更新 更多