Javascript 如何达到这些跨度';s并连接其id';s

Javascript 如何达到这些跨度';s并连接其id';s,javascript,jquery,Javascript,Jquery,因此,我: <li id="foo"> <span> bar </span> <ul> <li> <span id="1234"></span> </li> <li> <span id="5678"></span> </li> </ul> </li> 酒吧

因此,我:

<li id="foo">
   <span> bar </span>
   <ul>
   <li>
      <span id="1234"></span>
   </li>
   <li>
      <span id="5678"></span>
   </li>

   </ul>
</li>
  • 酒吧
  • 我需要连接span id并使var foobar=“12345678”

    另外,我需要从id为“foo”的顶部Li开始工作,因为跨度id可以是动态的/未知的

    谢谢

    类似这样:

    window.concat = "";
    $('#foo li span').each(function () {
      window.concat += $(this).attr('id');
    });
    console.log(window.concat);
    
    小提琴:试试这个:

    var foobar = "";
    $('#foo span[id]').each(function(){
       foobar += this.id
    })
    
    使用以下命令:

    var foobar = '';
    $('#foo li span').each(function() { 
        foobar += $(this).attr('id'); 
    });
    


    其他人都在使用
    .each()
    。使用
    .map()
    这有点简单

    var ids = $.map($("#foo span[id]"), function(el) {
                                           return el.id;
                                        }).join("");
    
    var ids = $("#foo span[id]").toArray()
                                .map(function(el) {
                                        return el.id;
                                     }).join("");
    
    我还使用has属性选择器来确保只获得具有ID属性的
    span
    元素

    演示:


    或者您可以使用本机的
    数组.prototype.map

    var ids = $.map($("#foo span[id]"), function(el) {
                                           return el.id;
                                        }).join("");
    
    var ids = $("#foo span[id]").toArray()
                                .map(function(el) {
                                        return el.id;
                                     }).join("");
    
    演示:


    .map()
    的优点在于它不依赖于任何外部变量,因此您可以保存并重用该函数

    var mappers = {
        getIDs: function(el, i) { return el.id; }
        /* other mapping functions */
    };
    
    …然后在需要时使用它

    var ids = $.map($("#foo span[id]"), mappers.getIDs).join("");
    

    这是可以的,但它会击中顶部的酒吧。这可能是OP的意图,但看起来他想将span的嵌套在嵌套的LITIS中是一个半解决方案,因为他还想构造变量名“foobar”。或者,OP需要在他的值选择中找到更多的变化…:)谢谢大家,很抱歉,我上面的代码帖子没有真正显示我在做什么。实际上br也有一个id,比如说“7890”。有多个li的id=“foo”,所以我举了一个坏例子。我认为这将是一个混乱的刮掉,所以我会选择这个作为这个问题的答案。但我会为一个更复杂的情况开始另一个问题,但更接近我所寻找的。。。谢谢各位。关于其他问题,请参考