2017-06-30 12 views
-1

Sur Firefox 54, la première et la troisième case à cocher affichent leur texte interne alors que la seconde n'a pas mais elles ont toutes la même structure, construite simplement en utilisant différentes méthodes. Quelle est la raison de ce comportement?JavaScript/HTML affichage incohérent de la case à cocher HTML interne

input2 = document.getElementById("input2"); 
 
input2.innerHTML = "Check me inner HTML"; 
 
input2.innerText = "Check me inner Text"; 
 

 
input3 = document.createRange().createContextualFragment("<input type='checkbox'>Check me fragment</input>"); 
 
document.body.appendChild(input3);
<input type="checkbox">Check me HTML</input> 
 
<input type="checkbox" id="input2"></input>

+1

Les navigateurs sont autorisés à manipuler le HTML non valide comme ils le souhaitent, il n'y a pas de règles. ['input'] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input) est un élément vide, il" _Doit avoir une balise de début et ne doit pas avoir de balise de fin_ " . – Teemu

+1

'' est un élément vide et n'a même pas de balise de fermeture – charlietfl

+1

Les éléments HTML [''] (https://developer.mozilla.org/en/docs/Web/HTML/Element/Input) sont des éléments vides et ne doit pas avoir d'étiquette de fin. – PeterMader

Répondre

1

<input> éléments ne sont pas un "HTML intérieur". La structure HTML résultante est:

<input type="checkbox">Check me HTML 
<input type="checkbox" id="input2">Check me inner Text</input> 
<script type="text/javascript">/* your js */</script> 
<input type="checkbox">Check me fragment 

La seconde n'est pas un code HTML valide. Le texte "interne" ne sera pas rendu.

Je ne suis pas tout à fait sûr pourquoi le 3ème rend correctement. Le navigateur peut être en mesure de réparer le fragment avant qu'il ne soit inclus dans la page.
(Le </input> peut être simplement supprimé, ce qui rend le HTML valide)