选择之间的文字

时间:2013-09-07 16:53:07

标签: javascript jquery html

是否可以在
标签之间选择文字?我正在使用下面预先格式化的代码来尝试选择这些数据:纽约,NY 10012

我和$('#address').find('br').eq(2).text()一起玩过,但知道必须有更好的方法。

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

谢谢!

6 个答案:

答案 0 :(得分:4)

检索div的HTML并拆分br标记:

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

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

答案 1 :(得分:4)

您可以使用DOM并使用childNodes数组选择适当的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/

答案 2 :(得分:3)

var vals = $("#address > br").map(function(i, br) {
    return $.trim(br.previousSibling.data);
}).toArray();

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

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


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

var txt = $.trim($("#address > br")[2].previousSibling.data);

答案 3 :(得分:1)

这个怎么样:

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

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

请注意,它允许以不同的方式编写&lt; br&gt;标签

答案 4 :(得分:0)

试试这个:

var html = $('#address').html();
var arr = html.split('<br>');
var data = arr[2]; //the information that you want

答案 5 :(得分:0)

我可能会找到这个解决方案来找到你想要的文本字段:

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

这里有:https://stackoverflow.com/a/298758/681538

为什么呢?因为它是分隔符不可知的,并且您实际上只是使用分隔符分隔的文本节点列表。既然我们可以使用jquery获取文本节点而不必关心你必须调整的分隔符,那么为什么我们呢?