【问题标题】:javascript/jquery:: get text value?javascript/jquery:: 获取文本值?
【发布时间】:2010-11-09 01:09:46
【问题描述】:

我有一个这样的 dom 结构:

<a>abc<span>def</span></a>

当我点击它时,我想从<a> 标记中获取文本。

但是,当使用 this.text 时,我得到的是 abcdef 而不仅仅是 abc

我将如何获得仅<a> 的文本值?

我是否必须这样做,然后在<span> 的文本长度上执行substr()

【问题讨论】:

    标签: javascript jquery dom text


    【解决方案1】:

    另一种选择:

    var text = $("a").contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).text();
    

    【讨论】:

    • 我注意到下面尼克的一个克隆,因此是一个额外的对象。这个方法是否也产生了一个额外的对象?
    • 不,它不会创建额外的对象。
    【解决方案2】:

    您可以通过从.clone() 获取.text() 来实现,其中不包含这些子元素,如下所示:

    $("a").click(function() {
      var text = $(this).clone().children().remove().end().text();
    });
    

    You can test it out here.

    【讨论】:

      【解决方案3】:

      如果这是实际结构(<span> 之前的 <a> 文本),您可以这样做:

      $('a').click(function() {
          var txt = this.firstChild.nodeValue;
      });
      

      这将非常快,但同样,它假定文本总是在前,并且它没有被其他元素分割。

      【讨论】:

        【解决方案4】:

        您可以只要求浏览器为您完成,而不是使用库来遍历 dom:

        var string = element.innerText || element.textContent;
        

        这应该适用于所有基于 webkit 的浏览器、firefox、ie 和 opera。

        【讨论】:

        • 那仍然会给你“abcdef”。
        【解决方案5】:

        另一种选择:

        var text = $('a').text().replace($('a span').text(), '');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-18
          • 1970-01-01
          • 2011-08-15
          • 2011-07-20
          相关资源
          最近更新 更多