如何使用jQuery获取给定元素之前的文本?

时间:2009-10-09 13:09:04

标签: jquery

让我们考虑一下html代码:

<p>
  Some text followed by <span>a span element</span>
  and another text followed by <b>a bold text</b>.
</p>

如何使用jQuery在spanb元素之前获取文本?

我尝试$("span").prev()$("b").prev()但它确实有效,因为文字不是元素。我也试过$("span").parent(),但它与整个段落匹配,而我只想要它的一部分。

你能告诉任何解决方案吗?提前谢谢: - )

4 个答案:

答案 0 :(得分:23)

如何将它们收集到一个数组中,而不是两次调用$

var texts = $('span, b').map(function(){
    return this.previousSibling.nodeValue
});
texts[0]; // "Some text followed by "
texts[1]; // " and another text followed by "

参考文献:

答案 1 :(得分:3)

我担心你需要使用正则表达式。为了在span元素之前获取文本,请使用以下内容:

var txt = $('span').parent().html();
var regex = /(.*)<span>/;
txt = txt.match(regex)[1];

修改正则表达式以匹配字符串的其他部分。

答案 2 :(得分:2)

var textBefore = $('span')[0].previousSibling.nodeValue;

我一直在寻找解决方案,并且很困惑为什么我需要映射到数组。上下文对我不起作用。我终于想出了如何写它。

这是最基本的解决方案。使用[0]将元素转换为elementNode,允许您调用previousSibling代码。除非更方便,否则无需使用map函数将其放入数组中。

答案 3 :(得分:0)

我提出了以下解决方案:

var c = $("span").context.previousSibling;
alert(c.data);

但是我不确定使用不同的浏览器时有多安全?