Подтвердить что ты не робот

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?

4b9b3361

Ответ 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(

Ответ 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("");