如何忽略子元素的innerText

时间:2015-06-01 17:12:50

标签: javascript jquery

<a href="#">
<span class="myspan"> Don't want this text </span>
I want this text
</a>

如何在没有跨度内的文字的情况下抓住上面的文字? 假设跨度可能出现

2 个答案:

答案 0 :(得分:2)

这并不像你希望的那样漂亮,但至少它不涉及克隆:

$('a').contents()
      .get()
      .map(function(n) { return n.nodeType === 3 ? n.textContent.trim() : ''; })
      .join('')

请参阅Fiddle

答案 1 :(得分:0)

非Jquery解决方案,由于没有克隆完成,因此速度更快。

Jsfiddle演示:https://jsfiddle.net/b0424w4L/

<强>代码

function getDirectLastText(ele) {
    var txt = null;
    [].forEach.call(ele.childNodes, function (v) {
        if (v.nodeType == 3) txt = v.textContent.replace(/^\W*\n/, '');
    });
    return txt;
}

解释

甚至文本也是DOM中的节点。它是调用文本节点,就像html注释也是一个节点。只有那些没有显示。此函数获取最后一个文本节点并显示它。可以很容易地扩展它以显示元素内的所有文本节点并排除所有子元素。

类似的jquery版本就是这样,也没有克隆。

$(this).contents().filter(function() {
  return this.nodeType == 3;
}).text()