选择多个相似的html元素,使用javascript将其内容存储在数组中

sauutmhj  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(335)

我想选择要存储在数组中的h3元素内容。因此,如何选择所有h3元素并存储其内容。我使用queryselectorall()选择所有类似的元素,但未能达到目标。非常感谢。

<body>
  <ul class="student-list">
    <li class="student-item cf">
      <div class="student-details">
        <h3 class="students">Ethel Dean</h3>
      </div>
    </li>

    <li class="student-item cf">
      <div class="student-details">
        <h3 class="students">Lawrence Martin</h3>
      </div>
    </li>
    <script src="code.js"></script>
</body>
bz4sfanl

bz4sfanl1#

可以在数组文字中使用iterable spread语法从 NodeList 那个 querySelectorAll 返回,然后使用 map 在此基础上,获取包含文本内容的新数组( textContent )在这些要素中的每一个要素中:

const contents =
    [...document.querySelectorAll("h3")]
    .map(el => el.textContent);
const contents =
    [...document.querySelectorAll("h3")]
    .map(el => el.textContent);
console.log(contents);
<ul class="student-list">
     <li class="student-item cf">
        <div class="student-details">
           <h3 class="students">Ethel Dean</h3>  
        </div>
     </li>

     <li class="student-item cf">
        <div class="student-details">
           <h3 class="students">Lawrence Martin</h3>
        </div>
     </li>    
</ul>

你也可以申请 Array.prototype.map 直接到 NodeList 从…起 querySelectorAll 这样做并不罕见,但对于初学者来说,这可能看起来相当奇怪:

const contents = Array.prototype.map.call(
    document.querySelectorAll("h3"),
    el => el.textContent
);
const contents = Array.prototype.map.call(
    document.querySelectorAll("h3"),
    el => el.textContent
);
console.log(contents);
<ul class="student-list">
     <li class="student-item cf">
        <div class="student-details">
           <h3 class="students">Ethel Dean</h3>  
        </div>
     </li>

     <li class="student-item cf">
        <div class="student-details">
           <h3 class="students">Lawrence Martin</h3>
        </div>
     </li>    
</ul>

因为您只是在标记名上搜索,所以也可以使用 getElementsByTagName 在某些情况下,这可能要快得多(尽管这不太重要)。以上两种方法都适用于 HTMLCollection 那个 getElementsByTagName 返回:

const contents1 =
    [...document.getElementsByTagName("h3")]
    .map(el => el.textContent);
console.log(contents1);
const contents2 = Array.prototype.map.call(
    document.getElementsByTagName("h3"),
    el => el.textContent
);
console.log(contents2);
<ul class="student-list">
     <li class="student-item cf">
        <div class="student-details">
           <h3 class="students">Ethel Dean</h3>  
        </div>
     </li>

     <li class="student-item cf">
        <div class="student-details">
           <h3 class="students">Lawrence Martin</h3>
        </div>
     </li>    
</ul>

相关问题