让我们考虑一下html代码:
<p>
Some text followed by <span>a span element</span>
and another text followed by <b>a bold text</b>.
</p>
如何使用jQuery在span
和b
元素之前获取文本?
我尝试$("span").prev()
和$("b").prev()
但它确实有效,因为文字不是元素。我也试过$("span").parent()
,但它与整个段落匹配,而我只想要它的一部分。
你能告诉任何解决方案吗?提前谢谢: - )
答案 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);
但是我不确定使用不同的浏览器时有多安全?