2012-07-06 78 views
23

例如,我们有这个文件jQuery的 - 获取元素文本没有孩子文本

<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" 
+0

所以你想*所有*子文本节点,没有更深的嵌套文本节点? – 2012-07-06 12:33:51

+0

@ F.Calderan谢谢 – 2012-07-06 12:50:40

回答

43

嘿,试试这个,请” :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());​ 
+0

@Random nopes它不是我':P'我的插件通常是漫长而冗长的插件':)'(Not) – 2012-07-06 12:36:30

+7

+1 for using .end()。从来不知道存在,现在它是hella有用的。 – Grinn 2012-08-07 18:43:31

+0

@Grinn saweet bruv,是啊,有一些jq apis,这是令人敬畏的使用,但没有广泛使用,:)有趣的是,呵呵,谢谢加1. – 2012-08-07 19:10:59

24

当前accepted answer是在性能方面相当可怕的,所以我觉得有义务写一个更轻量级的一个:

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

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

    return str; 
}; 

console.log($('#mydiv').mytext());​ 
+1

好得多!我正在寻找一种迭代所选元素的每个子元素的方法,但我不知道“contents()”,谢谢! – 2014-10-16 23:07:43

+0

请参阅http://stackoverflow.com/a/6520267/14731获取相关答案。 – Gili 2014-11-09 18:34:35