Строковый аргумент Javascript со ссылкой на символ

StackOverflow https://stackoverflow.com/questions/2029889

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть вызов метода JavaScript со строковым параметром.В тексте строки иногда содержатся ссылки на символы HTML, например. ' Я получаю непредвиденную ошибку идентификатора.Если у меня есть ссылка на символ как " тогда все работает нормально.Не знаю, почему это так.Ниже приведен фрагмент кода того, что я пытаюсь сделать.Фактический метод намного длиннее и пытается сделать что-то другое, чем то, что я показываю здесь, но этот фрагмент должен воспроизвести ошибку.

<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>

При наведении курсора мыши получаю ошибку

Это было полезно?

Решение

Проблема в том, что ваш &#39; преобразуется в ' перед оценкой JavaScript.Итак, JavaScript видит следующее (обернутое для удобства чтения):

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;

Обратите внимание, как строка заканчивается после manufacturer, а остальная часть воспринимается как код с дополнительной несовпадающей закрывающей кавычкой '.Вам нужно поставить префикс ' в manufacturer's с обратной косой чертой, чтобы строка была правильно заключена в кавычки в JavaScript:

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

Вам также нужны круглые скобки в вашем alert выражения:

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

Другие советы

Тебе необходимо точка с запятой после этой ссылки на персонажа

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top