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

让我们考虑以下html代码:

Some text followed by a span element and another text followed by a bold text.

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

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

你能告诉任何解决方案吗? 先感谢您 :-)

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

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

参考文献:

  • previousSibling属性
  • jQuery.map

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

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

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

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

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

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

我想出了以下解决方案:

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

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