JQuery:获取标记内容,不包括嵌套标记

时间:2010-01-05 15:58:57

标签: jquery text jquery-selectors css-selectors nested

我有一些HTML如下:

<span id="A">Text I'm interested in
  <span id="B">Other crap I don't care about</span>
</span>

我希望获得跨度“A”的文本内容,不包括任何嵌套标签(即上例中的跨度“B”的内容)。我正在尝试获取文本内容,而不是HTML内容。另外,在我的特殊情况下,我知道在任何其他标签之前,跨度A中总会有一些文本,但我也对这种约束较少的解决方案感兴趣。

我考虑过的简单但笨重的方法只是做$(“#A”)。html()然后解析直到我点击未转义的“&lt;”但感觉应该有一个更清洁的解决方案。

3 个答案:

答案 0 :(得分:6)

我很确定没有内置方法可以做到 - 虽然你可以寻找一个插件,它可能存在。其他人发布了.text()方法(但删除了帖子),这将获得所有文本,减去标签,这意味着你将得到“文本我对其他垃圾感兴趣我不关心” - - 不是你想要的。

修改

好的,我觉得我对此感兴趣所以我花了一些时间。这是解决方案:)

    copyOf = $('#A').clone();
    copysKids = copyOf.children();
    copysKids.remove();

    alert(copyOf.text());

我们正在做的是克隆你试图从中获取文本的节点 - 我们不想对原始文件进行操作,因为这会改变页面。然后我们抓住所有子节点的集合,然后对它们进行核对。剩下的文字是你要找的文字。

答案 1 :(得分:0)

以下内容应该为您提供

$("#A").find("#B").remove().end().text());

这是非常具体的问题。不确定是否有通用解决方案,但

答案 2 :(得分:0)

对于OP的具体示例,正确的解决方案是

$('#A').prop('firstChild').nodeValue

如果你想要一个能够处理前N个孩子中的一个或多个是标签而不是文本节点的情况的强大解决方案,那么必须对此进行详细阐述。