Existe uma maneira de converter HTML em texto normal sem realmente escrevê-lo para um seletor com Jquery?
eu entendo até agora que em jQuery, com a função html (), podemos converter HTML em texto, por exemplo,
$("#myDiv").html(result);
converte o "resultado" (que é o código html) em texto normal e exibe-o no myDiv.
Agora, minha pergunta é, existe uma maneira de eu simplesmente converter o html e colocá-lo em uma variável?por exemplo:
var temp;
temp = html(result);
Algo assim, claro que isto não funciona, mas como posso colocar o convertido numa variável sem escrevê-lo ao ecrã? Desde que eu estou checando o convertido em um loop, pensei que é bastante e desperdício de recursos se continuar escrevendo-o para a tela para cada loop único.
Editar:
Desculpe a confusão, por exemplo, se o resultado for " <p>abc</p> "
então $(#mydiv).html(result)
faz o mydiv display "abc"
, que "converte" html em texto normal, removendo as marcas <p>
. Então, como posso colocar "abc"
numa variável sem fazer algo como var temp=$(#mydiv).text()
?
7 answers
Não, o método html
não transforma o código HTML em texto, transforma o código HTML em elementos DOM. O navegador irá processar o código HTML e criar elementos a partir dele.
Você não tem que colocar o código HTML na página para tê-lo processado em elementos, você pode fazer isso em um elemento independente:
var d = $('<div>').html(result);
Agora você tem um objeto jQuery que contém um elemento div
que tem os elementos do código HTML processado como crianças. Ou:
var d = $(result);
Agora tens um objecto jQuery. que contém os elementos do código HTML processado.
Pode simplesmente remover todas as marcas de HTML:
var text = html.replace(/(<([^>]+)>)/g, "");
Por que não utilizar .text()
$("#myDiv").html($(result).text());
var tmp = $("<div>").attr("style","display:none");
var html_text = tmp.html(result).text();
tmp.remove();
Mas o modo como se modifica a cadeia com expressão regular é mais simples, porque não usa DOM traversal.
Pode substituir o html pelo texto com a expressão regular, como em resposta ao Utilizador Crozin
.
P. S.
Também poderá gostar do modo como <br>
está a substituir por símbolos de linha nova:
var text = html.replace(/<\s*br[^>]?>/,'\n')
.replace(/(<([^>]+)>)/g, "");
Aqui está a solução de não-jQuery:
function html2text( html ) {
var d = document.createElement( 'div' );
d.innerHTML = html;
return d.textContent;
}
Funciona muito bem no IE ≥9.
Var temp = $(your_selector).html ();
A variável temp é um texto que contém o HTML
$("#myDiv").html(result);
não está a formatar o texto para o código html. Você pode usar .html()
para fazer algumas coisas.
Se disser $("#myDiv").html();
onde não está a passar parâmetros para a função ' html ()', então está a "obter" o html que está neste momento nesse elemento div.
então você poderia dizer,
var whatsInThisDiv = $("#myDiv").html();
console.log(whatsInThisDiv); //will print whatever is nested inside of <div id="myDiv"></div>
Se passar num parâmetro com a sua chamada .html()
estará a configurar o html para o que está guardado dentro da variável ou texto que passar. Por exemplo
var htmlToReplaceCurrent = '<div id="childOfmyDiv">Hi! Im a child.</div>';
$("#myDiv").html(htmlToReplaceCurrent);
Isso vai deixar o teu dom com este aspecto...
<div id="myDiv">
<div id="childOfmyDiv">Hi! Im a child.</div>
</div>