J'ai une liste déroulante qui est remplie par Javascript.
En décidant quelle devrait être la valeur par défaut à afficher lors du chargement, j'ai réalisé que les propriétés suivantes montraient exactement les mêmes valeurs:
innerText
innerHtml
label
text
textContent
outerText
Ma propre recherche montre des tests d'évaluation ou des comparaisons entre quelques-uns d'entre eux, mais pas tous.
Je peux utiliser mon propre bon sens et choisir 1 ou l'autre car ils donnent le même résultat, mais je crains que ce ne soit pas une bonne idée si les données devaient changer.
Mes conclusions sont:
innerText
affichera la valeur telle quelle et ignorera tout formatage HTML pouvant être inclusinnerHTML
affichera la valeur et appliquera toute mise en forme HTMLlabel
semble être le même queinnerText
, donc je ne vois pas la différencetext
semble être la même queinnerText
la version abrégée de jQuerytextContent
semble identique àinnerText
mais conserve le formatage (tel que\n
)outerText
semble être le même queinnerText
Mes recherches ne peuvent m'amener que dans la mesure où je ne peux tester que ce que je peux penser ou lire ce qui est publié, est-ce que quelqu'un peut confirmer si ma recherche est correcte et s'il y a quelque chose de spécial à propos de label
et outerText
?
la source
.text()
pour obtenir le contenu textuel d'un élément, car cela fournira une prise en charge maximale de tous les navigateurs.Réponses:
De MDN :
N'inclura donc
innerText
pas le texte masqué par CSS, mais letextContent
fera.Au cas où vous auriez manqué cela, permettez-moi de le répéter plus clairement: ne pas utiliser à
.innerHTML
moins que vous n'ayez spécifiquement l'intention d'insérer du HTML dans un élément et que vous ayez pris les précautions nécessaires pour vous assurer que le HTML que vous insérez ne peut pas contenir de contenu malveillant. Si vous souhaitez uniquement insérer du texte, utilisez.textContent
ou si vous devez prendre en charge IE8 et versions antérieures, utilisez la détection de fonction pour désactiver entre.textContent
et.innerText
.L'une des principales raisons pour lesquelles il existe tant de propriétés différentes est que différents navigateurs avaient à l'origine des noms différents pour ces propriétés et qu'il n'y a toujours pas de prise en charge complète de tous les navigateurs. Si vous utilisez jQuery, vous devez vous en tenir à
.text()
car cela est conçu pour lisser les différences entre les navigateurs. *Pour certains des autres:
outerHTML
est fondamentalement le même queinnerHTML
, sauf qu'il inclut les balises de début et de fin de l'élément auquel il appartient. Je n'arrive pas à trouver beaucoup de description duouterText
tout. Je pense que c'est probablement une propriété héritée obscure et devrait être évitée.la source
in order to retrieve or write text within an element, people use innerHTML. textContent should be used instead
, c'est que textContent n'est pas pris en charge par IE 8, qui est encore assez largement utilisé car c'est la version fournie avec Windows 7. Et FireFox ne prend pas en charge innerText . Ainsi, bien que innerHTML ne soit pas parfaitement adapté à cette fin, il offre une meilleure fiabilité entre les navigateurs..textContent
et.innerText
, ou d'utiliser quelque chose comme jQuery qui atténue ces différences de navigateur.textContent
avec des balises HTML. Si vous avez besoin d'insérer du HTML, vous utiliserez.innerHTML
ou construiriez des nœuds HTML en utilisantdocument.createElement()
, etc.innerHTML
(contrairement àtextContent
) peut ouvrir la porte à des attaques XSS (Cross-Site Scripting) sur votre application. Si le contenu inséré dans le DOM viainnerHTML
n'est pas entièrement fiable, un attaquant pourrait utiliser un<script>
élément pour détourner votre application authentifiée sous le niveau d'autorisation d'un utilisateur ou d'un administrateur. Toutes les attaques, y compris les attaques d'apparence étrange<img src="x.x" onerror="alert('Hacked!');"/>
et une myriade de attaques plus sournoises, sont efficacement détruites en les utilisant simplementtextContent
dans ce contexte au lieu des dangereusesinnerHTML
.Une liste déroulante comprend une collection d'
Option
objets, vous devez donc utiliser la.text
propriété pour inspecter la représentation textuelle de l'élément, c'est-à-direBtw,
Ce n'est pas correct;
$(element).text()
est la version jQuery alors queelement.text
c'est la version d'accès à la propriété.la source
Addendum à la réponse par ailleurs excellente de JLRishe:
La raison pour laquelle innerText et externalText existent tous les deux est pour la symétrie avec innerHTML et externalHTML. Cela devient important lorsque vous attribuez à la propriété.
Supposons que vous ayez un élément
e
avec du code HTML<b>Lorem Ipsum</b>
:la source
textContent
ne formatera pas (\ n)la source
Consultez la compatibilité des navigateurs http://www.quirksmode.org/dom/html/ si vous ciblez des navigateurs spécifiques. Parce qu'il semble qu'ils ont tous leur propre façon de faire les choses. C'est pourquoi il est préférable d'utiliser JQuery .text () ( http://api.jquery.com/text/ ) si vous ne voulez pas bidouiller.
la source
text
etlabel
supprimez les espaces supplémentaires. J'ai obtenu ces résultats lors de la recherche d'options dans une liste déroulante:la source