Javascript 如何忽略子元素的innerText

Javascript 如何忽略子元素的innerText,javascript,jquery,Javascript,Jquery,我怎样才能只抓取上面的文本而不抓取跨度内的文本? 假设跨度可能出现或不出现,这可能不像您希望的那么漂亮,但至少不涉及克隆: <a href="#"> <span class="myspan"> Don't want this text </span> I want this text </a> 请参阅非Jquery解决方案,该解决方案速度更快,因为不需要进行克隆。 JSFIDLE演示: 代码 $('a').contents() .ge

我怎样才能只抓取上面的文本而不抓取跨度内的文本?
假设跨度可能出现或不出现,这可能不像您希望的那么漂亮,但至少不涉及克隆:

<a href="#">
<span class="myspan"> Don't want this text </span>
I want this text
</a>
请参阅非Jquery解决方案,该解决方案速度更快,因为不需要进行克隆。 JSFIDLE演示:

代码

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

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

类似的jquery版本会是这样的,也没有克隆。
text(),我试图让它保持简单。我可以很明显地检查是否存在内部span并从结果的锚文本中删除它们的文本()。从@AmmarCSE的链接中,尝试
$($a”).clone().children().remove().end().text()
a fiddle:(对于那些喜欢实验的人)我没有测试你的代码,我可能错了,但我认为你应该将
txt
初始化为空字符串,而不是使用
=
替换,使用
+=
,因为可以而且可能有更多的文本节点,而不仅仅是“我想要这个文本”,我知道我也这么说,它可以很容易地修改以获取所有文本节点,但由于OP需要最后一个节点,因此我将函数命名为
get..LastText
而不是
getDirectText
,或者
getAllDirectText
。但是,是的,按照你所说的去做会使所有可用的文本节点很容易地复合起来,将
=
更改为
+=
,并将
txt=null
更改为
txt='
我肯定这就是他想要的不?但是如果他愿意的话,他会看评论的
function getDirectLastText(ele) {
    var txt = null;
    [].forEach.call(ele.childNodes, function (v) {
        if (v.nodeType == 3) txt = v.textContent.replace(/^\W*\n/, '');
    });
    return txt;
}
$(this).contents().filter(function() {
  return this.nodeType == 3;
}).text()