如何使用jQuery选择元素的自己的文本

时间:2014-01-21 05:02:30

标签: javascript jquery html

我有以下html:

<div>
    <div id="t1">Text1</div> 
    <div id="t2">
        Text2 
        <ul id="t3">
            <li id="t4">Text3</li>
        </ul>
    </div>
</div>

我想为每个元素选择仅拥有文本。我尝试使用jQuery text函数,但它返回选择中所有元素的组合文本内容:

t1 => Text1
t2 => Text2 Text3
t3 => Text3
t4 => Text3

我需要的是:

t1 => Text1
t2 => Text2
t3 =>
t4 => Text3 

4 个答案:

答案 0 :(得分:5)

$.fn.ownText = function() {
    return this.eq(0).contents().filter(function() {
       return this.nodeType === 3 // && $.trim(this.nodeValue).length;
    }).map(function() {
       return this.nodeValue;
    }).get().join('');
}

var text = $('#t2').ownText();

http://jsfiddle.net/5L9Ww/

稍微快一点的选择:

$.fn.ownText = function() {
    var children = this.get(0).childNodes, 
        l = children.length,
        a = [];
    for (var i = 0; i < l; i++) {
      if (children[i].nodeType === 3) 
          a.push(children[i].nodeValue);
    }
    return a.join('');
}

或者一种不同的方法,它接受粘合剂来连接节点的值和修剪结果的选项:

$.fn.ownText = function(o) {
    var opt = $.extend({ glue: "", trim: false }, o),
        children = this.get(0).childNodes, 
        l = children.length,
        a = [];
    for (var i = 0; i < l; i++) {
        if (children[i].nodeType === 3) {
          var val = children[i].nodeValue;
          a.push(opt.trim ? $.trim(val) : val);
        }
    }
    return a.join(opt.glue);
}

$('#t2').ownText({
    glue: ',',
    trim: true
});

答案 1 :(得分:2)

尝试

function getText(el) {
    return $(el).contents().map(function () {
        return this.nodeType == 3 && $.trim(this.nodeValue) ? $.trim(this.nodeValue) : undefined;
    }).get().join('')
}

$('div *').each(function () {
    console.log(this.id, getText(this))
})

演示:Fiddle

答案 2 :(得分:2)

更好的方法是:

    $("selector").clone().children().remove().end().text(); 

在这里演示:

http://jsfiddle.net/dM247/1/

这不是优化版本,但你可以优化它:-)谢谢!

答案 3 :(得分:0)

试试这个

  var n = new Array();
 $("div div, li").each(function () {

    n[$(this).attr('id')] = $(this).text()

 })
 console.log(n)

演示     http://jsfiddle.net/KVLDD/