Используйте jquery, чтобы найти первый дочерний узел с текстом - PullRequest
1 голос
/ 28 февраля 2011

Мне нужно выбрать первый бит читаемого текста элемента.

<li>
Hello world
</li>

и

<li>Hello world</li>

следует читать «Hello world»

<li>
<span>Hello Jupiter</span>
What's up?
</li>

следует читать «Привет, Юпитер»

У меня проблемы с пробелами, поэтому

function getTextFromFirstChild(el) {
    return $(el).contents().first().text();
}

вернет lf, но больше ничего (это ведь первый текстовый узел)

Ответы [ 5 ]

3 голосов
/ 28 февраля 2011
function getTextFromFirstChild(el) {
    return $(el).contents(":not(:empty)").first().text();
}

, кажется, делает трюк

0 голосов
/ 30 января 2013

Попробуйте:

.contents().first().text()
0 голосов
/ 28 февраля 2011

Я бы сделал это:

$("selector").contents().filter(function() {
    return (this.innerText) ? this.innerText.match(/\S/) : false;
}).first();
0 голосов
/ 28 февраля 2011

Я думаю, что лучший способ сделать это с помощью рекурсии:

function getTextFromFirstChild(el) {
    var ch = $(el).children();
    if (ch.length < 1) return $(el).text();
    alert($(el).html());
    return getTextFromFirstChild(ch[0]);
}
0 голосов
/ 28 февраля 2011

Я бы сделал это:

function getTextFromFirstChild(el) {
    var result;
    $(el).contents().each(function() {
        if( result = $.trim( $(this).text() ) ) {
            return false;
        }
    });
    return result;
}

Зацикливание содержимого, обрезка пробела из содержимого текста.Если усеченное содержимое дает достоверный результат, оно вызовет return false; разрыв цикла и возврат результата.

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