首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法获取querySelector中某个类的元素

无法获取querySelector中某个类的元素
EN

Stack Overflow用户
提问于 2020-07-03 21:04:51
回答 2查看 54关注 0票数 0

我似乎无法在“总计”部分的"span“标签中提取价格。这真的很奇怪,因为getElementsByTagName返回null?

代码语言:javascript
复制
var total = document.querySelector("tbody").getElementsByClassName("grand totals");
console.log(total.innerHTML);
代码语言:javascript
复制
<tbody>

  <tr class="totals sub">
    <th data-bind="i18n: title" class="mark" scope="row">Subtotal</th>
    <td class="amount">
      <span class="price" data-bind="text: getValue(), attr: {'data-th': title}" data-th="Subtotal">£524.00</span>
    </td>
  </tr>


  <tr class="totals-tax">
    <th data-bind="text: title" class="mark" colspan="1" scope="row">Tax</th>
    <td data-bind="attr: {'data-th': title}" class="amount" data-th="Tax">
      <span class="price" data-bind="text: getValue()">£104.80</span>
    </td>
  </tr>

  <tr class="grand totals">
    <th class="mark" scope="row">
      <strong data-bind="i18n: title">Order Total</strong>
    </th>
    <td data-bind="attr: {'data-th': title}" class="amount" data-th="Order Total">
      <strong><span class="price" data-bind="text: getValue()">£628.80</span></strong>
    </td>
  </tr>
</tbody>

EN

回答 2

Stack Overflow用户

发布于 2020-07-03 21:20:48

看起来这是<tbody>元素缺少必需的<table>元素作为其父元素的问题:

代码语言:javascript
复制
<table>
  <tbody>
    <!-- Contents of tbody -->
  </tbody>
</table>

或者,您应该用<table>元素替换<tbody>元素:

代码语言:javascript
复制
<table>
  <!-- Contents of table -->
</table>

正如@JesusPacheco的回答所指出的,Element.getElementsByClassName返回一个元素数组,如MDN上的文档所示:

Element方法getElementsByClassName()返回一个活动的HTMLCollection,其中包含具有指定一个或多个类名的每个后代元素。

(注:Document.getElementsByClassName相当于Element.getElementsByClassName)

因此,您必须访问指定的索引才能检索其属性:

代码语言:javascript
复制
// NOTE: This is demo code!
var els = document.getElementsByClassName('my-class another-class');
// Retrieve the length of els:
console.log(els.length);
// Access the first element's inner HTML:
console.log(els[0].innerHTML);

更新的代码片段(假设您打算从getElementsByClassName中检索返回元素列表中第一个元素的内部超文本标记语言):

代码语言:javascript
复制
var total = document.querySelector("tbody").getElementsByClassName("grand totals");
// getElementsByClassName returns an array, so you can't just
// log the inner HTML
// console.log(total.innerHTML);
console.log(total[0].innerHTML);
代码语言:javascript
复制
<table>
  <tbody>

    <tr class="totals sub">
      <th data-bind="i18n: title" class="mark" scope="row">Subtotal</th>
      <td class="amount">
        <span class="price" data-bind="text: getValue(), attr: {'data-th': title}" data-th="Subtotal">£524.00</span>
      </td>
    </tr>


    <tr class="totals-tax">
      <th data-bind="text: title" class="mark" colspan="1" scope="row">Tax</th>
      <td data-bind="attr: {'data-th': title}" class="amount" data-th="Tax">
        <span class="price" data-bind="text: getValue()">£104.80</span>
      </td>
    </tr>

    <tr class="grand totals">
      <th class="mark" scope="row">
        <strong data-bind="i18n: title">Order Total</strong>
      </th>
      <td data-bind="attr: {'data-th': title}" class="amount" data-th="Order Total">
        <strong><span class="price" data-bind="text: getValue()">£628.80</span></strong>
      </td>
    </tr>
  </tbody>
</table>

票数 1
EN

Stack Overflow用户

发布于 2020-07-03 21:11:28

实际上,getElementsByClassName返回一个元素数组。您必须通过其类名获取span元素,如下所示:

代码语言:javascript
复制
var total = document.querySelector("tbody").getElementsByClassName("price");
console.log(total[index].innerHTML); // total is an array of "price" class span
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62716081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档