Pergunta

Eu quero extrair o texto dentro de um elemento com JQuery

<div id="bla">
    <span><strong>bla bla bla</strong>I want this text</span>
</div>

Eu quero apenas o texto "Quero que este texto" sem o forte-tag. Como posso fazer isso?

Foi útil?

Solução

Tente isto ...

<script type="text/javascript">
//<![CDATA[
$(document).ready(function(){
    $("#bla span").contents().each(function(i) {
        if(this.nodeName == "#text") alert(this.textContent);
    });
});

//]]>
</script>

Este não precisa remover todos os outros nós de contexto, e só vai lhe dar o nó de texto (s) em cada iteração.

Outras dicas

Este não é (testado):

    var clone = $("#bla > span").clone();
    clone.find('strong').remove();
    alert(clone.text());

Variação no método de karim79:

$("span").clone().find("strong").remove().end().text();

ou se você apenas deseja que o texto raiz sem saber o que as outras marcas estão nele:

$("span").clone().children().remove().end().text();

ainda um pouco longo, mas acho que isso quase tão curto quanto você pode esperar.

var textFromSpanWithoutStrongTag = $('div#bla > span').text();

ATUALIZADO:

var textFromSpanWithoutTextFromStrongTag =
    $('div#bla > span').text().replace($('div#bla > span > strong').text(), '');

ATUALIZADO:

var text = '';
$("div#bla > span").contents().each(function () {
    if(this.nodeType == 3) text = text + this.nodeValue; });

Testado no FF3, IE8, O10b em:

<div id="bla">
    <span>
        <strong>bla bla bla</strong>
        I want this
        <strong>bla bla</strong>
        text
        <span>bla bla bla</span>
    </span>
</div>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top