jQuery:从.text()中排除子项

时间:2012-07-05 15:37:01

标签: javascript jquery

  

可能重复:
  jquery exclude some child nodes from .text()

鉴于此HTML:

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

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

Soulive

如果我这样做:

$(this).text();

我明白了:

SoulivePlay

如何排除span的文字内容?

4 个答案:

答案 0 :(得分:58)

微插件:

$.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(

答案 1 :(得分:16)

http://jsfiddle.net/r8kNL/

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

答案 2 :(得分:10)

$(this).clone().find('span').remove().end().text();

否则,使用其他方法,如果您确定自己的span元素在结尾处始终包含“play”一词,则只需使用replace()substring()函数,例如

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

后一个例子是一个过于本地化但并非防弹的方法,但我提到的只是从不同的角度提出解决方案

答案 3 :(得分:2)

$( this.childNodes ).map( function(){
    return this.nodeType === 3 && this.nodeValue || "";
}).get().join("");