jquery从文本之间选择文本

时间:2010-07-09 18:15:42

标签: javascript jquery html xhtml jquery-selectors

我想抓住两个标签之间的文本,这是在主div中,以下是示例...

<div class="main_result">

some text....
<div>other divs</div>
<p>some other html</p>
<div class="bread_crump"></div>

text i want to grab

<b>selected category</b>
some other text and div...

</div>

显然以下示例不起作用,但它的想法......

var count = $('.main_result', data)
                                .find('.bread_crump')
                                .after('<span class="count_total" style="color:red">')
                                .parents('.main_result')
                                .find('.bread_crump ~ b')
                                .before('</span>')
                                .parents('.main_result').html();

3 个答案:

答案 0 :(得分:1)

var txt = $('.main_result')
          .contents() // get it's contents
          .filter(function() { //filter the result for textnodes that aren't empty (helps ie's parsing of textnodes)
             if( this.nodeType == 3 && $.trim(this.data) != "") { //get only text nodes and filter out whitespace elements
                 return true;
             }
             return false;
          }).get(1).data; // get 1 because it's your 2nd non-whitespace text node

var txt = $.trim(txt); // trim out all the new lines 'n stuff

更好的是,将这些元素包装成你可以轻松找到的东西,b)依赖(文本节点的数量可以得到iffy)

答案 1 :(得分:0)

我不知道您是否可以从文本块中仅选择一部分文本,而不会在其周围添加任何标记。如果文本中的任何模式是一致的,我会使用

var text = $(".main_result").html();

然后使用REGEX在"bread_crump" div之后和<b>

之前提取文本

如果不将所需的文本添加到可以直接引用jQuery选择器的元素中,它将是一个脏的黑客,并且根据页面布局的一致性,可能会也可能不会从页面加载更改为页面加载。如果您无法控制页面布局,那么此处提供的任何其他解决方案都将比我提供的解决方案更接近解决方案。

如果布局中有一个模式,您可以确定它是一致的,那么请将其作为锚点关注并从那里到达您的选择。

答案 2 :(得分:0)

var firstNode = $(".main_result div.bread_crump").get(0)
var secondNode = $(".main_result b").get(0)
var nextToFirst = $("div.bread_crump").get(0).nextSibling;
if(nextToFirst.nodeType == 3 && nextToFirst.nextSibling == secondNode) {
  alert(nextToFirst.nodeValue);
}

没有太多jQuery但使用DOM。