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

У меня есть вызов метода 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>

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


person Eqbal    schedule 08.01.2010    source источник
comment
Между 9 и точкой с запятой нет символа, верно?   -  person Emrah GOZCU    schedule 08.01.2010
comment
не могли бы вы опубликовать исходный код JavaScript или хотя бы его фрагменты? Это значительно увеличивает время получения качественных ответов ;)   -  person Juri    schedule 08.01.2010
comment
Спасибо, Юрий, я добавил фрагмент, чтобы продемонстрировать проблему.   -  person Eqbal    schedule 08.01.2010
comment
@Emrah нет, нет никакого символа между 9 и точкой с запятой.   -  person Eqbal    schedule 08.01.2010


Ответы (2)


Проблема в том, что ваш &#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
}
person Brian Campbell    schedule 08.01.2010

Вам нужна точка с запятой после этой ссылки на символ.

person RHicke    schedule 08.01.2010