Строковый аргумент Javascript со ссылкой на символ
-
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'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>
При наведении курсора мыши получаю ошибку
Решение
Проблема в том, что ваш '
преобразуется в '
перед оценкой 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\'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
}
Другие советы
Тебе необходимо точка с запятой после этой ссылки на персонажа