Quelle est la différence entre innerHTML
, innerText
et childNodes[].value
en JavaScript?
javascript
dom
user2819851
la source
la source
innerText
une implémentation non standard de textContext par MSIE n'est pas anodine.innerText
a été ajouté aux normes et pris en charge par tous les principaux navigateurs.textContent
est désormais pris en charge par IE> = 9 et peut être utilisé à la place deinnerText
dans la plupart des cas (bonus, c'est beaucoup plus rapide), mais il existe des différences entre les deux, donc dans certains cas, vous ne pouvez pas les échanger.innerText
est bien pris en charge dans tous les navigateurs. Firefox a commencé à le prendre en charge à partir de la version 45. caniuse.com/#search=innertextinnerHTML
est une vulnérabilité connue pour les attaques XSS. Cela dit, ceinnerText
n'est pas sûr à 100% non plus. stackoverflow.com/questions/52707031/does-innertext-prevent-xss blog.cloudboost.io/…Réponses:
Contrairement à
innerText
, cependant,innerHTML
vous permet de travailler avec du texte riche HTML et ne pas encoder et décoder automatiquement le texte. En d'autres termes,innerText
récupère et définit le contenu de la balise en texte brut, tandis queinnerHTML
récupère et définit le contenu au format HTML.la source
Les exemples ci-dessous font référence à l'extrait HTML suivant:
Le nœud sera référencé par le JavaScript suivant:
element.innerHTML
Définit ou obtient la syntaxe HTML décrivant les descendants de l'élément
Cela fait partie des spécifications d' analyse et de sérialisation DOM du W3C . Notez que c'est une propriété d'
Element
objets.node.innerText
Définit ou récupère le texte entre les balises de début et de fin de l'objet
innerText
a été introduit par Microsoft et n'a pas été pris en charge par Firefox pendant un certain temps. En août 2016, ainnerText
été adopté par le WHATWG et a été ajouté à Firefox en v45.innerText
vous donne une représentation sensible au style du texte qui essaie de correspondre à ce qui est rendu par le navigateur, cela signifie:innerText
s'appliquetext-transform
etwhite-space
règlesinnerText
coupe l'espace blanc entre les lignes et ajoute des sauts de ligne entre les élémentsinnerText
ne renverra pas de texte pour les éléments invisiblesinnerText
retourneratextContent
pour les éléments qui ne sont jamais rendus comme<style />
et `Node
élémentsnode.textContent
Obtient ou définit le contenu textuel d'un nœud et de ses descendants.
Bien qu'il s'agisse d' une norme W3C , elle n'est pas prise en charge par IE <9.
Node
élémentsnode.value
Celui-ci dépend de l'élément que vous avez ciblé. Pour l'exemple ci-dessus,
x
retourne un objet HTMLDivElement , qui n'a pas devalue
propriété définie.Les balises d'entrée (
<input />
), par exemple, définissent unevalue
propriété , qui fait référence à la "valeur actuelle dans le contrôle".De la documentation :
Exemple de script
Voici un exemple qui montre la sortie pour le HTML présenté ci-dessus:
la source
innerText
: quirksmode.org/dom/html et quirksmode.org/dom/tests/innerhtml.htmlFirefox >=45
est pris en charge.innerText
fait désormais partie de la norme et devrait être pris en charge par Firefox à partir de la version 45; peut-être la raison d'une mise à jour de cette excellente réponse @faraz<
en<
,>
en>
, etc.InnerText
La propriété html-encode le contenu, en se tournant<p>
vers<p>
, etc. Si vous souhaitez insérer des balises HTML, vous devez utiliserInnerHTML
.la source
En termes simples:
innerText
affichera la valeur telle quelle et ignore touteHTML
mise en forme pouvant être incluse.innerHTML
affichera la valeur et appliquera touteHTML
mise en forme.la source
Pour l'affiner davantage et récupérer la valeur Alec par exemple, utilisez un autre .childNodes [1]
la source
En termes de
MutationObservers
, le paramètreinnerHTML
génère unechildList
mutation car les navigateurs suppriment le nœud, puis ajoutent un nouveau nœud avec la valeur deinnerHTML
.Si vous définissez
innerText
, unecharacterData
mutation est générée.la source
La seule différence entre
innerText
etinnerHTML
est l'innerText
insertion de la chaîne telle qu'elle est dans l'élément, toutinnerHTML
en l'exécutant en tant que contenu html.la source
InnerText
ne renverra que la valeur de texte de la page avec chaque élément sur une nouvelle ligne en texte brut, tandis queinnerHTML
renverra le contenu HTML de tout ce qui se trouve à l'intérieur de labody
balise etchildNodes
renverra une liste de nœuds, comme son nom l'indique.la source
La
innerText
propriété renvoie la valeur textuelle réelle d'un élément html tandis que lainnerHTML
renvoie laHTML content
. Exemple ci-dessous:la source
pour ajouter à la liste, innerText gardera votre texte-transform, innerHTML ne sera pas
la source