【问题标题】:How to get a text before given element using jQuery?如何使用jQuery在给定元素之前获取文本?
【发布时间】:2009-10-09 13:09:04
【问题描述】:

让我们考虑以下 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(),但它匹配整个段落,而我只想要它的一部分。

您能建议任何解决方案吗?提前谢谢你:-)

【问题讨论】:

标签: jquery


【解决方案1】:

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

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

参考资料:

【讨论】:

  • 感谢您的解决方案。但是,我不能让它在这种情况下工作。 var c = jQuery('span'); 和之后的 c.previousSibling 返回 nullc.context.previousSibling 没问题。为什么?
  • 我是说,不要使用那种场景 (c.context)。使用我的答案中的代码。
【解决方案2】:

恐怕您需要为此使用正则表达式。为了在 span 元素之前获取文本,请使用以下内容:

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

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

【讨论】:

  • 这行不通,因为 text() 不返回任何 html。其次,即使改成使用html(),目标元素也可能不是父元素中的第一个span。
  • 这只是一个演示如何做到这一点。没有简单的方法可以让此文本剥离所有标记的内容。你必须使用正则表达式。
【解决方案3】:
var textBefore = $('span')[0].previousSibling.nodeValue;

我一直在寻找解决方案,但对为什么需要映射到数组感到困惑。上下文对我不起作用。终于知道怎么写了。

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

【讨论】:

    【解决方案4】:

    我想出了以下解决方案:

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

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

    【讨论】:

    • 你为什么不直接使用我的解决方案?它做同样的事情,但没有访问.context
    • 这是另一种解决方案。您的解决方案不能在所有情况下都使用(我不能)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2018-06-04
    相关资源
    最近更新 更多