代码之家  ›  专栏  ›  技术社区  ›  Old Geezer

如何转换作为jQuery对象数组返回的结果数组?

  •  0
  • Old Geezer  · 技术社区  · 4 年前

    $("someSelector") 它返回一个数组 Node 节点 作为jQuery对象以便我可以对它们执行jQuery函数?

    简而言之,作为一个例子,我如何实现 .text() 除了第一个元素之外,jQuery对象的每个元素的函数结果?

    2 回复  |  直到 4 年前
        1
  •  0
  •   palaѕн    4 年前

    请知道,当你使用类似于:

    // Selecting all <h1> tags. 
    var headings = $( "h1" );
    

    在这里 headings <h1> 标签已经在页面上。这可以通过检查 .length 财产 :

    // Viewing the number of <h1> tags on the page.
    var headings = $( "h1" ); 
    alert( headings.length );
    

    因此,当你使用 $("someSelector") 这样,您就不需要再次将它转换为jQuery对象,因为它已经是jQuery对象了,您可以对它们执行所有jQuery函数。但就这样 .text() 直接在它上,我们需要循环该集合中的每个元素。

    您可以使用jQuery .each() 方法,在jQuery对象上迭代,为每个匹配的元素执行一个函数,如:

    $("someSelector").each(function( index ) {
      console.log( index + ": " + $( this ).text() );
    });
    

    如中所述 docs

    这个 .each()

        2
  •  0
  •   CertainPerformance    4 年前

    使用 .map 将每个元素传递给 $

    const $elements = [...$("someSelector")]
      .map(elem => $(elem));
    

    这将为您提供一个jQuery对象数组,每个对象都包含一个元素。但这有点奇怪。

    如果需要使用jQuery,如果希望除第一个元素之外的所有元素的文本,请对数组进行切片以选择除第一个元素之外的所有元素,然后映射它:

    const $texts = [...$("someSelector")]
      .slice(1)
      .map(elem => $(elem).text());
    

    但是如果你要检索文本,我宁愿使用 textContent

    const $texts = [...$("someSelector")]
      .slice(1)
      .map(elem => elem.textContent);