J'ai une liste déroulante qui est remplie par Javascript.
Tout en décidant quelle devrait être la valeur par défaut à afficher lors du chargement, je me suis rendu compte que les propriétés suivantes affichaient exactement les mêmes valeurs:
innerText
innerHtml
label
text
textContent
outerText
Mes propres recherches montrent 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 l'un ou l'autre, car ils fournissent le même résultat, mais je crains que cela ne soit pas une bonne idée si les données devaient changer.
Mes découvertes sont:
innerText
affichera la valeur telle quelle et ignorera tout formatage HTML pouvant être inclusinnerHTML
affichera la valeur et appliquera tout formatage HTMLlabel
est identique à innerText
, je ne vois pas la différencetext
semble être identique à innerText
mais la version abrégée de jQuerytextContent
est identique à innerText
mais conserve le formatage (tel que \n
) outerText
semble être identique à innerText
Ma recherche ne peut me mener que dans la mesure où je ne peux que tester ce que je peux penser ou lire de ce qui est publié. Peut-on confirmer si ma recherche est correcte et s’il ya quelque chose de spécial à propos de label
et outerText
De MDN :
Internet Explorer a introduit element.innerText. L'intention est à peu près la même [que textContent] avec quelques différences:
Notez que bien que textContent récupère le contenu de tous les éléments, y compris les éléments
<script>
et<style>
, la propriété essentiellement équivalente spécifique à IE, innerText, ne le fait pas.innerText est également conscient du style et ne renvoie pas le texte des éléments masqués, contrairement à textContent.
Comme innerText est conscient du style CSS, cela entraînera un refoulement, contrairement à textContent.
Donc, innerText
n'inclura pas le texte masqué par CSS, mais textContent
le sera.
innerHTML renvoie le code HTML comme son nom l'indique. Très souvent, pour récupérer ou écrire du texte dans un élément, les gens utilisent innerHTML. textContent devrait être utilisé à la place. Étant donné que le texte n'est pas analysé au format HTML, les performances sont donc meilleures. De plus, cela évite un vecteur d’attaque XSS.
Au cas où vous auriez manqué cela, permettez-moi de le répéter plus clairement: Do not utilisez .innerHTML
sauf si vous avez précisément l'intention d'insérer du HTML dans un élément et que vous avez pris les précautions nécessaires pour vous assurer que le HTML que vous insérez ne peut pas contenir contenu malveillant. Si vous souhaitez uniquement insérer du texte, utilisez .textContent
ou si vous devez prendre en charge IE8 et les versions antérieures, utilisez la détection de fonctionnalité pour désactiver .textContent
et .innerText
.
L'une des principales raisons de l'existence d'un si grand nombre de propriétés différentes est que les différents navigateurs portaient à l'origine des noms différents pour ces propriétés et que la prise en charge croisée des navigateurs n'est toujours pas complète. Si vous utilisez jQuery, vous devriez vous en tenir à .text()
, car il est conçu pour atténuer les différences entre les navigateurs. *
Pour certains des autres: outerHTML
est fondamentalement identique à innerHTML
, 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 de outerText
du tout. Je pense que c'est probablement une propriété obscure héritée et devrait être évitée.
Une liste déroulante comprend une collection de Option
objets. Vous devez donc utiliser la propriété .text
pour examiner la représentation textuelle de l'élément, c'est-à-dire.
<option value="123">text goes here</option>
^^^^^^^^^^^^^^
Btw,
.text
semble être identique à.innerText
mais la version abrégée de JQuery
Ce n'est pas correct; $(element).text()
est la version de jQuery alors que element.text
est la version d’accès à la propriété.
Addendum à JLRishe est par ailleurs une excellente réponse:
La raison pour laquelle innerText et outerText existent est la symétrie avec innerHTML et outerHTML. Cela devient important lorsque vous attribuez à la propriété.
Supposons que vous ayez un élément e
avec le code HTML <b>Lorem Ipsum</b>
:
e.innerHTML = "<i>Hello</i> World!"; => <b><i>Hello</i> World!</b>
e.outerHTML = "<i>Hello</i> World!"; => <i>Hello</i> World!
e.innerText = "Hello World!"; => <b>Hello World!</b>
e.outerText = "Hello World!"; => Hello World!
Voir 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 vous amuser.
textContent
ne formatera pas (\ n)