Eu tenho uma lista suspensa que é preenchida por Javascript.
Ao decidir qual deveria ser o valor padrão a ser exibido no carregamento, percebi que as seguintes propriedades mostravam exatamente os mesmos valores:
innerText
innerHtml
label
text
textContent
outerText
Minha própria pesquisa mostra testes de marcação de banco ou comparações entre alguns deles, mas não todos.
Posso usar meu próprio senso comum e escolher um ou outro, pois eles fornecem o mesmo resultado, mas estou preocupado que isso não seja uma boa ideia se os dados forem alterados.
Minhas descobertas são:
innerText
mostrará o valor como está e ignora qualquer formatação HTML que possa ser incluídainnerHTML
mostrará o valor e aplicará qualquer formatação HTMLlabel
parece ser o mesmo queinnerText
, então não vejo a diferençatext
parece ser o mesmo queinnerText
a versão abreviada do jQuerytextContent
aparece da mesma forma,innerText
mas mantém a formatação (como\n
)outerText
parece ser o mesmo queinnerText
Minha pesquisa só pode me levar a um ponto em que eu só posso testar o que consigo pensar ou ler o que é publicado, mas alguém pode confirmar se minha pesquisa está correta e se há algo de especial label
e outerText
?
javascript
html
dom
MyDaftQuestions
fonte
fonte
.text()
obter o conteúdo de texto de um elemento, pois isso fornecerá o máximo suporte a vários navegadores.Respostas:
Do MDN :
Portanto
innerText
, não incluirá texto oculto por CSS, mastextContent
incluirá.Caso você tenha perdido isso, deixe-me repeti-lo mais claramente: Do não usar
.innerHTML
a menos que você pretende especificamente para inserir HTML dentro de um elemento e ter tomado as precauções necessárias para garantir que o HTML você está inserindo não pode conter conteúdo malicioso. Se você deseja apenas inserir texto, use.textContent
ou se precisar oferecer suporte ao IE8 e versões anteriores, use a detecção de recurso para desativar entre.textContent
e.innerText
.A principal razão pela qual existem tantas propriedades diferentes é que navegadores diferentes originalmente tinham nomes diferentes para essas propriedades e ainda não há suporte completo entre navegadores para todos eles. Se você estiver usando o jQuery, você deve se atentar,
.text()
pois ele foi projetado para suavizar as diferenças entre navegadores. *Para alguns dos outros:
outerHTML
é basicamente o mesmo queinnerHTML
, exceto pelo fato de incluir as tags de início e fim do elemento ao qual ele pertence. Não consigo encontrar muita descriçãoouterText
. Eu acho que é provavelmente uma propriedade herdada obscura e deve ser evitada.fonte
in order to retrieve or write text within an element, people use innerHTML. textContent should be used instead
é que o textContent não é suportado pelo IE 8, que ainda é amplamente utilizado, porque essa é a versão do Windows 7. O FireFox não oferece suporte ao innerText . Portanto, embora o innerHTML não seja ideal para esse fim, ele possui uma melhor confiabilidade entre navegadores..textContent
e.innerText
, ou usar algo como o jQuery que suaviza essas diferenças do navegador.textContent
com tags HTML. Se você precisar inserir HTML, você usaria.innerHTML
ou construiria nós HTML usandodocument.createElement()
, etc.innerHTML
(ao contráriotextContent
) pode abrir a porta para ataques XSS (Cross-Site Scripting) no seu aplicativo. Se o conteúdo que está sendo inserido no DOM viainnerHTML
não for totalmente confiável, um invasor poderá usar um<script>
elemento para seqüestrar seu aplicativo autenticado sob o nível de autorização de um usuário ou administrador. Todos os ataques, incluindo ataques de aparência estranha<img src="x.x" onerror="alert('Hacked!');"/>
e uma infinidade de ataques furtivos, são efetivamente destruídos simplesmente usandotextContent
-se neste contexto, em vez dos perigososinnerHTML
.Uma lista suspensa compreende uma coleção de
Option
objetos; portanto, você deve usar a.text
propriedade para inspecionar a representação textual do elemento, ou seja,Btw,
Isso não está correto;
$(element).text()
é a versão do jQuery, enquantoelement.text
a versão de acesso à propriedade.fonte
Adendo à excelente resposta de JLRishe:
A razão pela qual innerText e outerText existem é por simetria com innerHTML e outerHTML. Isso se torna importante quando você atribui à propriedade.
Suponha que você tenha um elemento
e
com código HTML<b>Lorem Ipsum</b>
:fonte
textContent
não formatará (\ n)fonte
Consulte a compatibilidade dos navegadores http://www.quirksmode.org/dom/html/ se você estiver direcionando navegadores específicos. Porque parece que todos eles têm seu próprio jeito de fazer as coisas. É por isso que é melhor usar o JQuery .text () ( http://api.jquery.com/text/ ) se você não quiser mexer.
fonte
text
elabel
remova espaços extras. Obtive esses resultados ao consultar opções em um menu suspenso:fonte