2

Is it possible to select text between
tags? I am working with the preformatted code below trying to select this data: New York, NY 10012

I've played around with $('#address').find('br').eq(2).text(), but know that there must be a better way.

    <div id="address">
        Joe Dirt<br>
        PO Box 842<br>
        New York NY 10012<br>
        800-555-5555<br>
        <br>
    </div>

Thanks!

4

6 回答 6

5

childNodes您可以使用 DOM 并使用数组选择适当的 TextNode,而不是根据 html 选择文本。

由于节点从 开始计算0

address.childNodes[0] # "Joe Dirt"
address.childNodes[1] #   br element
address.childNodes[2] # "PO Box 842"
address.childNodes[3] #   br element
address.childNodes[4] # "New York NY 10012"
address.childNodes[5] #   br element
address.childNodes[6] # "800-555-5555"
address.childNodes[7] #   br element

示例代码:

var address = document.getElementById ("address");
alert(address.childNodes[4].nodeValue);

http://jsfiddle.net/78evc/

于 2013-09-07T17:02:01.803 回答
5

检索标签的 HTMLdiv和拆分:br

$.trim($("#address").html().split("<br>")[2]);

JS 小提琴:http: //jsfiddle.net/KQgu5/

于 2013-09-07T16:54:49.820 回答
3
var vals = $("#address > br").map(function(i, br) {
    return $.trim(br.previousSibling.data);
}).toArray();

由于文本始终出现在<br>元素之前,因此您可以选择brs 并将.previousSibling.data每个元素映射到一个数组。

这也不会受到 HTML 渲染在不同浏览器中略有不同的可能性的影响,您可以通过 HTML 解析方法获得。


如果您只需要一个值,请执行以下操作:

var txt = $.trim($("#address > br")[2].previousSibling.data);
于 2013-09-07T16:55:01.293 回答
1

这个怎么样:

var line = $("#address").html().split(/<br *\/?>/i)[2];

我知道这不是“选择”这条线,但由于没有其他方法可以使用或不使用 jQuery(您的解决方案对我来说开箱即用),我认为这可能是一个好方法。

请注意,它允许编写 <br> 标签的不同方式。

于 2013-09-07T17:06:52.607 回答
0

尝试这个:

var html = $('#address').html();
var arr = html.split('<br>');
var data = arr[2]; //the information that you want
于 2013-09-07T16:55:39.473 回答
0

我可能会使用此解决方案来查找您想要的文本字段:

  $("div")
  .contents()
  .filter(function() {
    return this.nodeType === 3;
  })[2];

它在这里介绍:https ://stackoverflow.com/a/298758/681538

为什么?因为它与分隔符无关,并且您实际上只是拥有一个用分隔符分隔的文本节点列表。既然我们可以使用 jquery 获取文本节点,而不必关心您必须调整到什么分隔符,那么我们为什么要这样做呢?

于 2013-09-07T17:34:27.477 回答