【问题标题】:jQuery - get only parent element text without childrenjQuery - 只获取没有子元素的父元素文本
【发布时间】:2015-03-09 06:22:21
【问题描述】:

我正在抓取一个网页,我要查找的文本位于包含另一个 spanspan

<div class="someParentDiv">
  <span>this is the text I want   
    <span class="childSpanClass">I don't want this text</span>
  </span>
</div>

我正在尝试使用 jQuery 选择来获取我想要的文本,但是当我使用 text() 获取元素的文本时,我也会得到我不想要的子跨度的文本。

我设法只得到我想要的文字

$('div.someParentDiv span').remove('.childSpanClass')

但这对我来说似乎有点倒退(see example),我想知道是否有更好、更好的方法来做到这一点。 有什么想法吗?

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

不使用 JQuery:选择 div.someParentDivspan 元素的第一个子元素的 textContent。第一个子节点是该跨度的TEXT_NODE(参见MDN),它是一个(不可见的)独立节点。使用 JQuery 使用 $('.someParentDiv span').contents().first('[nodeType=3]').text();

var res = document.querySelector('#result');

// no jquery
res.innerHTML = 'DOM: ' + 
                 document.querySelector('.someParentDiv span').firstChild.textContent;

// jquery

res.innerHTML += '<br>JQuery: ' +  
                 $('.someParentDiv span').contents().first('[nodeType=3]').text();
#result {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="someParentDiv">
  <span>this is the text I want   
    <span class="childSpanClass">I don't want this text</span>
  </span>
</div>

<div id="result"></div>

【讨论】:

    【解决方案2】:
    【解决方案3】:

    您可以通过循环所有contents 来过滤掉所有纯文本:

    var node = $('.someParentDiv > span').contents().filter(function() {
        return this.nodeType == 3; // text node
    });
    
    alert(node.text());
    

    【讨论】:

    • 不错。我不知道整个nodeType 的事情。
    猜你喜欢
    • 2012-07-06
    • 2016-02-29
    • 2020-03-24
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多