JQuery: исключить детей из .text()
Возможный дубликат:
jquery исключить некоторые дочерние узлы из .text()
С учетом этого HTML:
<a href="#" class="artist">Soulive<span class="create-play">Play</span></a>
Я хочу получить текстовое содержимое a
(которое this
в контексте моей функции) без текстового содержимого span
, поэтому я остался с:
Soulive
Если я это сделаю:
$(this).text();
Я получаю:
SoulivePlay
Как исключить текстовое содержимое span
?
Ответы
Ответ 1
Микроплагин:
$.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(
Ответ 2
http://jsfiddle.net/r8kNL/
$(this).contents().filter(function() {
return this.nodeType == 3;
}).text()
Ответ 3
$(this).clone().find('span').remove().end().text();
в противном случае с другим подходом, если вы уверены, что ваши элементы span
всегда содержат слово "play" в конце, просто используйте функцию replace()
или substring()
, например.
var text = $(this).text();
text = text.substring(0, text.length-4);
последний пример является слишком локализованным и не пуленепробиваемым методом, но я упомянул просто предложить решение с другой точки зрения
Ответ 4
$( this.childNodes ).map( function(){
return this.nodeType === 3 && this.nodeValue || "";
}).get().join("");