使用jquery查找带有文本的第一个子节点

时间:2011-02-28 01:28:49

标签: jquery jquery-selectors

我需要选择元素的可读文本的第一位。

<li>
Hello world
</li>

<li>Hello world</li>

应为“Hello world”

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

应该是'Hello Jupiter'

我遇到空白问题,所以

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

将返回一个lf但没有别的(毕竟它是第一个文本节点)

5 个答案:

答案 0 :(得分:3)

function getTextFromFirstChild(el) {
    return $(el).contents(":not(:empty)").first().text();
}

似乎可以解决这个问题

答案 1 :(得分:0)

我会这样做:

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

循环内容,修剪文本内容中的空白区域。如果修剪后的内容给出了真实的结果,它将触发return false;打破循环,并返回结果。

答案 2 :(得分:0)

我认为实现这一目标的最佳方法是使用递归:

function getTextFromFirstChild(el) {
    var ch = $(el).children();
    if (ch.length < 1) return $(el).text();
    alert($(el).html());
    return getTextFromFirstChild(ch[0]);
}

答案 3 :(得分:0)

我会这样做:

$("selector").contents().filter(function() {
    return (this.innerText) ? this.innerText.match(/\S/) : false;
}).first();

答案 4 :(得分:0)

尝试:

.contents().first().text()