JQuery: выделение текста между закрытыми тегами - PullRequest
2 голосов
/ 24 августа 2011

Подобные вопросы были заданы, но не достаточно похожи!

Учитывая эту структуру:

<p class="text"> <b>1</b>this is point one<b>2</b>this is point two<b>3</b> </p>

Как бы я выделил текст между закрытыми тегами? то есть "это точка первая".

Содержимое возвращается через JSON-вызов, поэтому я не могу многое сделать со структурой, которую мне дают.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 24 августа 2011

Если вам нужен доступ к нескольким текстовым узлам, вы можете извлечь все это в массив, используя:

var data = $(".text").contents().filter(function() {
    return this.nodeType == Node.TEXT_NODE && !this.nodeValue.match(/^\s*$/);
}).toArray();

Теперь вы можете получить доступ к «это точка первая», используя data[0].nodeValue и «этоэто точка два "с использованием data[1].nodeValue.

Рабочая скрипка: http://jsfiddle.net/jHhFS/

Примечание: дополнительное условие (!this.nodeValue.match(/^\s*$/)) отфильтровывает текстовые узлы, содержащие только пробелы.

3 голосов
/ 24 августа 2011

может заменить ваш <b>#</b> на что-то более простое, чтобы разделить его, а затем повторить результаты

пример jsfiddle

JQuery:

var points = $('.text').html().replace(/<b>.<\/b>/g, ',').split(','),
    $results = $('#results');
for (var i in points) {
    if ($.trim(points[i]).length > 0) {
        $results.html($results.html() + points[i] + "<br />");
    }
}
1 голос
/ 24 августа 2011

вы можете получить это значение, используя .contents (). В вашем случае это будет работать:

alert($(".text").contents().eq(2).text())
0 голосов
/ 24 августа 2011

Вот потенциальное решение:

var nodes = $('p.text')[0].childNodes;
var results = [];

for (var i = 0; i < nodes.length; i++) {
    if (nodes[i].nodeType == Node.TEXT_NODE) {
        // support older browsers that do not have textContent
        var text = nodes[i].textContent || nodes[i].innerText;
        if ($.trim(text).length > 0) {   // optional - push non-empty strings
            results.push(text);
        }
    }
}
//console.log(results);

Демо: http://jsfiddle.net/mrchief/3L8Ze/1/

0 голосов
/ 24 августа 2011

Вы можете попробовать -

console.log($('p').contents().filter(function() {
    return this.nodeType == Node.TEXT_NODE;
}));

Это взято из - Как выбрать текстовые узлы с помощью jQuery? . Как указано в связанном вопросе, решение не будет работать с IE7, но в связанном вопросе есть обходной путь.

Рабочая демоверсия - http://jsfiddle.net/E53HU/1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...