Question

J'ai un appel de méthode javascript avec un paramètre de chaîne. Dans le texte de la chaîne contient parfois des références de caractères HTML, par exemple ' Je reçois une erreur d'identification inattendu. Si j'ai la référence de caractère " puis il fonctionne très bien. Je ne sais pas pourquoi. Ci-dessous un extrait de code de ce que je suis en train de faire. méthode actuelle est beaucoup plus longue et d'essayer de faire quelque chose de différent de ce que je montre ici, mais cet extrait devrait être en mesure de reproduire l'erreur.

<script>
function unescapeHTML(html) {
  var htmlNode = document.createElement("div");
  htmlNode.innerHTML = html;
  if(htmlNode.innerText)
    alert htmlNode.innerText; // IE
  else 
    alert htmlNode.textContent; // FF

}
</script>
<a class="as_Glossary" onmouseover="unescapeHTML('The manufacturer&#39;s sales in dollars to all purchasers in the United States excluding certain exemptions for a specific drug in a single calendar quarter divided by the total number of units of the drug sold by the manufacturer in that quarter'); return true;" onmouseout="hideGlossary(); return true;">Test</a>

Quand je mouseOver je reçois l'erreur

Était-ce utile?

La solution

Le problème est que votre &#39; est converti en un ' avant que le JavaScript est évalué. Donc, JavaScript voit ce qui suit (encapsulées de lisibilité):

unescapeHTML('The manufacturer's sales in dollars to all purchasers in 
the United States excluding certain exemptions for a specific drug in a 
single calendar quarter divided by the total number of units of the drug 
sold by the manufacturer in that quarter'); 
return true;

Remarquez comment la chaîne se termine après manufacturer, et le reste est treaded code, avec un ' de devis à proximité inégalée supplémentaire. Vous devez préfixer le ' dans manufacturer's avec une barre oblique inverse pour que la chaîne à être correctement cité en JavaScript:

a class="as_Glossary" onmouseover="unescapeHTML('The manufacturer\&#39;s sales...

Vous devez également entre parenthèses dans vos expressions alert:

function unescapeHTML(html) {
  var htmlNode = document.createElement("div");
  htmlNode.innerHTML = html;
  if(htmlNode.innerText)
    alert(htmlNode.innerText); // IE
  else 
    alert(htmlNode.textContent); // FF
}

Autres conseils

Vous avez besoin d'un point-virgule après cette référence de caractères

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top