jquery - 获取没有子文本的元素的文本

IT技术 javascript jquery
2021-02-04 15:41:21

例如我们有这个文件

<div id="mydiv">
    some text here 
    <div id="inner div">
         text for inner div
    </div>
</div>

我只需要#mydiv使用这样的一些代码来获取文本:

alert($('#mydiv').text());  // will alert "some text here"
3个回答

嘿,请试试这个”:http : //jsfiddle.net/MtVxx/2/

此处针对您的特定案例的良好链接:http : //viralpatel.net/blogs/jquery-get-text-element-without-child-element/(这只会获取元素的文本)

希望这可以帮助, :)

代码

jQuery.fn.justtext = function() {

    return $(this).clone()
            .children()
            .remove()
            .end()
            .text();

};

alert($('#mydiv').justtext());​
@Grinn seeeet bruv,是的,有一些 jq api,使用起来很棒但没有广泛使用,:) 很有趣,呵呵,感谢加 1。
2021-03-20 15:41:21
+1 用于使用 .end()。从来不知道它存在,现在它非常有用。
2021-03-27 15:41:21
这似乎在 Win XP IE 8 中崩溃了,周围的东西clonechildren仍在尝试解决这个问题..
2021-04-08 15:41:21

目前接受的答案在性能方面非常糟糕,所以我觉得有必要写一个更轻量级的答案

$.fn.mytext = function() {
    var str = '';

    this.contents().each(function() {
        if (this.nodeType == 3) {
            str += this.textContent || this.innerText || '';
        }
    });

    return str;
};

console.log($('#mydiv').mytext());​
好多了!我正在寻找一种方法来迭代所选元素的每个子元素,但我不知道contents(),谢谢!
2021-03-26 15:41:21

就像Ja͢ck 的答案,但不需要显式迭代(通过 .each())并收集textContents:

$('#mydiv').contents().filter(function(){return this.nodeType === 3}).text()

或者,如果您可以使用箭头函数:

$('#mydiv').contents().filter((i, el) => el.nodeType === 3).text()