JQuery выбрать текст между текстом - PullRequest
0 голосов
/ 09 июля 2010

Я хочу перехватить текст между двумя тегами, который находится в главном 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 ]

1 голос
/ 09 июля 2010
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

Лучше, однако, обернуть эти элементы во что-то, что вы можете а) легко найти и б) положиться (количество текстовых узлов может оказаться сомнительным)

0 голосов
/ 09 июля 2010
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.

0 голосов
/ 09 июля 2010

Я не знаю, чтобы вы могли выделить только часть текста из блока текста без какой-либо разметки вокруг него.Если бы в тексте был какой-либо шаблон, который был бы непротиворечивым, я бы использовал

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

, а затем использовал бы REGEX для вытягивания текста после "bread_crump" div и перед <b>

Без добавления нужного текста в элемент, на который можно напрямую ссылаться с помощью селектора jQuery, это будет грязным хаком, и в зависимости от согласованности макета страницы может изменяться или не изменяться от загрузки страницы к загрузке страницы.Если вы не можете управлять макетом страницы, любое из других решений, представленных здесь, будет более близким шагом к решению, чем то, что я предоставил.

Если в макете есть шаблон, который вы можете быть уверены, что он согласован,затем сфокусируйтесь на этом как на якоре и оттуда доберетесь до своего выбора.

...