【问题标题】:jQuery: exclude children from .text() [duplicate]jQuery:从 .text() 中排除子项 [重复]
【发布时间】:2012-07-06 01:28:01
【问题描述】:

鉴于此 HTML:

<a href="#" class="artist">Soulive<span class="create-play">Play</span></a>

我想获取a 的文本内容(在我的函数上下文中是this没有span 的文本内容,所以我离开了与:

Soulive

如果我这样做:

$(this).text();

我明白了:

SoulivePlay

如何排除span的文字内容?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:
    $( this.childNodes ).map( function(){
        return this.nodeType === 3 && this.nodeValue || "";
    }).get().join("");
    

    【讨论】:

      【解决方案2】:
      $(this).clone().find('span').remove().end().text();
      

      否则,使用不同的方法,如果您确定您的 span 元素始终在末尾包含单词“play”,只需使用 replace()substring() 函数,例如

      var text = $(this).text();
      text = text.substring(0, text.length-4);
      

      后一个例子肯定是一种过于本地化且不是防弹的方法,但我提到只是为了从不同的角度提出一个解决方案

      【讨论】:

      • 你可以使用"*" 这样它就不会依赖于我认为的这个特定结构
      • 或者,您可以将find('span') 替换为children()
      • No @Roko, children() 会比 find() 更有效,因为 children() 只向下遍历 1 级,并且无论如何我们都在移除孩子,这将随后移除所有较低的-级别。
      • $('li.yourclass').find('span').remove().end().text();对我来说很好。 Tks
      【解决方案3】:

      http://jsfiddle.net/r8kNL/

      $(this).contents().filter(function() {
        return this.nodeType == 3;
      }).text()
      

      【讨论】:

        【解决方案4】:

        一个微插件:

        $.fn.ignore = function(sel) {
          return this.clone().find(sel || ">*").remove().end();
        };
        

        ...拥有这个 HTML:

        <div id="test"><b>Hello</b><span> World</span>!!!</div>
        

        将导致:

        var text = $('#test').ignore("span").text(); // "Hello!!!"
        var html = $('#test').ignore("span").html(); // "<b>Hello</b>!!!"
        

        如果您希望它更快,并且您只需要排除直系子女...使用 .children( 而不是 .find(

        【讨论】:

        • 完美!我和:not 有类似的东西,但我错过了.contents(),这是关键。谢谢!
        • contents 不接受任何带有较新 jQuery 的参数:api.jquery.com/contents。 jQuery 1.10.1 的小提琴失败了
        • @Mrchief 我和 John Resig 进行了一次简短的电话交谈,他为这个可怕的错误道歉并承诺会在下一版本中修复 ;) 开玩笑,编辑了我的答案!(感谢您的通知!)
        • 很棒的创新想法,非常感谢在一分钟内解决更大的问题。
        • 现在是 2020 年,JQuery 还没有添加ignore()
        猜你喜欢
        • 1970-01-01
        • 2012-11-05
        • 1970-01-01
        • 2014-04-03
        • 2016-10-01
        • 2016-01-24
        • 2019-08-01
        • 2021-11-12
        • 2021-01-27
        相关资源
        最近更新 更多