【问题标题】:Retrieve text from list tag but don't calculate the child tag [duplicate]从列表标签中检索文本但不计算子标签[重复]
【发布时间】:2015-01-19 13:55:41
【问题描述】:

我正在尝试检索 <li> 中文本的计算,但我不需要在此计算中考虑子标签 <p>。 所以当我添加以下内容时,它自然会计算<li>中的所有文本。

$('ul li').text().length;

来自 HTML:

<ul>
    <li>Count me<p>Don't count me please.</p></li>
</ul>

有哪些可能的方法来实现这一点,从而不计算子标签文本?

【问题讨论】:

  • 是你不想考虑的子标签,还是子标签的内容?

标签: javascript jquery


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    只是减去它?

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

    【讨论】:

      【解决方案3】:

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

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

      var textNodes = $('ul li').contents().filter(function() {
          return this.nodeType == 3;
      }).get();
      console.log(textNodes[0]); // = "Count me"
      

      Example fiddle

      【讨论】:

        【解决方案4】:
        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);
        

        JSFIDDLE

        【讨论】:

        • 不需要 parseInt
        【解决方案5】:

        可能重复: jquery - get text for element without children text

        $('ul li').clone().children().remove().end().text();
        

        这里是更新的 jsfiddle:http://jsfiddle.net/zmy4mxc2/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-14
          • 1970-01-01
          • 1970-01-01
          • 2020-07-29
          • 1970-01-01
          • 1970-01-01
          • 2019-05-05
          • 1970-01-01
          相关资源
          最近更新 更多