Javascript 从列表标记中检索文本,但不';t计算子标记

Javascript 从列表标记中检索文本,但不';t计算子标记,javascript,jquery,Javascript,Jquery,我正在尝试检索中文本的计算,但我不需要在此计算中考虑子标记。 因此,当我添加以下内容时,它将自然计算中的所有文本 $('ul li').text().length; 从HTML: <ul> <li>Count me<p>Don't count me please.</p></li> </ul> 数一数我请不要数一数我 有什么可能的方法可以实现这一点,从而不计算子标签文本?只需减去它即可 var x = $(

我正在尝试检索
  • 中文本的计算,但我不需要在此计算中考虑子标记
    。 因此,当我添加以下内容时,它将自然计算
  • 中的所有文本

    $('ul li').text().length;
    
    从HTML:

    <ul>
        <li>Count me<p>Don't count me please.</p></li>
    </ul>
    
    • 数一数我请不要数一数我

    有什么可能的方法可以实现这一点,从而不计算子标签文本?

    只需减去它即可

    var x = $('ul li').text().length;
    var y = $('ul li p').text().length;
    console.log(x);
    console.log(y);
    console.log(x-y);
    

    您可以克隆元素,删除子元素,然后提取文本:

    var li = $('ul li').clone();
    li.children().remove();
    console.log(li.text().length);
    

    无论子元素的数量或类型如何,这都会起作用。

    通过选择器检索文本的常用方法将证明是困难的,因为
    text()
    方法是贪婪的,即使通过选择器排除子元素,也会获取可用的所有文本

    如果您只需要检索直接位于
    li
    中的文本,那么您只能从
    contents()
    中获取
    textNode
    值:

    可能重复的:


    这里有一个更新的JSFIDLE:

    是您不想考虑的子标记,还是子标记的内容?不需要parseInt
    var textNodes = $('ul li').contents().filter(function() {
        return this.nodeType == 3;
    }).get();
    console.log(textNodes[0]); // = "Count me"
    
    var len1 = $('ul li').text().length;
    var len2 = $('ul li p').text().length;
    console.log(len1+'=='+len2);
    
    var liLength = parseInt(len1)-parseInt(len2);
    
    console.log(liLength);
    
    $('ul li').clone().children().remove().end().text();