鉴于此HTML:
<a href="#" class="artist">Soulive<span class="create-play">Play</span></a>
我想获取a
的文本内容(在我的函数的上下文中为this
),而不是 span
的文本内容,所以我离开了:
Soulive
如果我这样做:
$(this).text();
我明白了:
SoulivePlay
如何排除span
的文字内容?
答案 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)
$(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("");