Javascript String аргумент с символьной ссылкой - PullRequest
1 голос
/ 08 января 2010

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

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

Ответы [ 2 ]

2 голосов
/ 08 января 2010

Проблема заключается в том, что ваш &#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
}
0 голосов
/ 08 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...