当前位置: 首页 > 知识库问答 >
问题:

获取div元素(不包括其子元素)的文本内容

松高歌
2023-03-14

我有以下的html代码,我需要console.log只有航运。尝试了一些方法,但似乎无法奏效。我试着先选择它的孩子,然后打印出它的父母的文本内容-不行...我可以删除它的孩子,打印出剩下的东西,但我做不到。

有什么建议吗?

谢谢你的帮助

<div class="accordion shadowed-box shipping collapsed summary">
  <fieldset>
    <legend>
    Shipping
        <div id="shippingTooltip" class="form-field-tooltip cvnship-tip" role="tooltip">
          <span class="tooltip">
            <div class="tooltip-content" data-layout="small tooltip-cvn">
              <div id="cart-checkout-shipping-tooltip" class="html-slot-container">
                <p>We ship UPS, FedEx and/or USPS Priority Mail.<br>  
                  <a class="dialogify" data-dlg-options="{&quot;height&quot;:200}" href="https://www.payless.com/customer-service/ordering-and-shipping/cs-ordering-shipping-schedule.html" title="shipping information">Learn more about our shipping methods and prices.</a>
                </p>    
              </div> 
            </div>
          </span>
        </div>
      <a href="javascript:app.checkout.editShipping();" id="section-header-note-sa" class="section-header-note" style="display: inline;">Edit</a>
    </legend>
  </fieldset>
</div>

我试过这个:

var accordionChildren = document.querySelector('.accordion.shadowed-box.shipping>fieldset>legend *');//selects the first child
var accordionTitle = accordionChildren.parentElement;
var text = accordionTitle.textContent;
console.log(text);

我想得到发货,但我仍然得到图例元素的所有文本内容

共有3个答案

谷博艺
2023-03-14

您可以获得

let legends = document.querySelector('.accordion.shadowed-box.shipping>fieldset>legend');
let title = legends.innerHTML.replace(/<.*/s, '');
// title = "Shipping"

正则表达式匹配第一个

景麒
2023-03-14

您只需要从所有元素子节点中找到TextNode子节点,您可以通过迭代所有childNodes来完成,当节点类型与TextNode匹配时,返回其textContext

有关如何选择元素的TextNode子节点的基于jQuery的解决方案,请参阅此问题-但我的示例显示了如何在vanilla ES中执行此操作(在子节点上使用for循环):

Object.defineProperty(HTMLElement.prototype, 'onlyTextContent', {
  enumerable: false,
  configurable: false,
  get: function() {
    for(let i = 0; i < this.childNodes.length; i++) {
      if(this.childNodes[i].nodeType === Node.TEXT_NODE) {
        return this.childNodes[i].textContent.trim();
      }
    }
    return null;
  }
});

document.addEventListener('DOMContentLoaded', function() {
  console.log(
    document.getElementById('legend1').onlyTextContent
  );
});
<div class="accordion shadowed-box shipping collapsed summary">
  <fieldset>
    <legend id="legend1">
    Shipping
        <div id="shippingTooltip" class="form-field-tooltip cvnship-tip" role="tooltip">
          <span class="tooltip">
            <div class="tooltip-content" data-layout="small tooltip-cvn">
              <div id="cart-checkout-shipping-tooltip" class="html-slot-container">
                <p>We ship UPS, FedEx and/or USPS Priority Mail.<br>  
                  <a class="dialogify" data-dlg-options="{&quot;height&quot;:200}" href="https://www.payless.com/customer-service/ordering-and-shipping/cs-ordering-shipping-schedule.html" title="shipping information">Learn more about our shipping methods and prices.</a>
                </p>    
              </div> 
            </div>
          </span>
        </div>
      <a href="javascript:app.checkout.editShipping();" id="section-header-note-sa" class="section-header-note" style="display: inline;">Edit</a>
    </legend>
  </fieldset>
</div>
董琦
2023-03-14

您可以通过迭代子节点(或者直接访问预期的节点)访问Text节点。

let textNode = accordionTitle.childNodes[0],
    text = textNode.textContent;

console.log(text);

看见https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes和https://developer.mozilla.org/en-US/docs/Web/API/Text

 类似资料:
  • 我正在浏览一个包含几个元素的网页,我想在不包含其子元素的情况下获取其中的文本。 页面结构如下: 当我使用时,得到的结果是: 我正在使用BeautifulSoup4和Python3

  • 问题内容: This is some text 获得“这是一些”并非易事。例如,返回“ This is some text”: 通常,如何获得特定元素的文本而不包含其子元素的文本? (我在下面提供了一个答案,但是如果有人想出一个不太丑陋的解决方案,它将让问题悬而未决)。 问题答案: 这是一个常规解决方案: 传递给函数的元素可以是从方法中获得的东西(即它可以是一个对象)。 或者,如果您没有jQuer

  • 问题内容: 的HTML 码 问题答案: 我已经看到这个问题在过去大约一年左右的时间里弹出了几次,我想尝试编写此函数…所以就到这里了。它接受父元素,并删除每个子元素的textContent,直到剩下的是textNode为止。我已经在您的HTML上对其进行了测试,并且可以正常工作。 你叫它

  • 问题内容: 的HTML 码 问题答案: 我已经看到这个问题在过去大约一年左右的时间里弹出了几次,我想尝试编写此函数…所以就到这里了。它接受父元素,并删除每个子元素的textContent,直到剩下的是textNode为止。我已经在您的HTML上对其进行了测试,并且可以正常工作。 你叫它

  • (我在下面给出了一个答案,但如果有人能想出一个不那么可怕的解决方案,我会保留这个问题)。

  • 问题内容: 我只想从汤中最上面的元素中提取文本;但是汤.text也会给出所有子元素的文本: 我有 输出为。我只想“是”。 实现此目标的最佳方法是什么? 编辑 :我也想在解析’ ‘时输出。 问题答案: 那又如何呢? 编辑: 我想我已经了解了你现在想要的。尝试这个: