2011-04-26 1 views
0

웹 응용 프로그램에 새로운 기능을 추가 할 때 Button 객체의 값을 동적으로 설정해야합니다. 값에 html로 인코딩 된 유니 코드 문자를 넣어야합니다. 이것을 구현할 때, 문자를 정의하는 위치에 따라 문자가 올바르게 표시되는지 여부가 결정됩니다. onclick 이벤트 자체에서 문자를 정의하면 문자가 제대로 표시됩니다. 함수 나 최상위 레벨에서 정의하면 리터럴 텍스트로 표시됩니다. , IE8 내 테스트에서내 문자열 선언의 위치가 내 HTML 인코딩 엔티티가 제대로 표시되는지 여부에 영향을주는 이유는 무엇입니까?

<html><body> 
<script type="text/javascript"> 
    var tlabel3 = '&gt; foo &lt;'; 
    function ChangeName2() { 
     document.getElementById('button2').value = '&gt; foo &lt;'; 
    } 
    function ChangeName3() { 
     document.getElementById('button3').value = tlabel3; 
    } 
    function ChangeName4(label4) { 
     document.getElementById('button4').value = label4; 
    } 
</script> 
<input type=button id=button1 value="&lt; foo &gt;"> - <a href=# onclick="document.getElementById('button1').value = '&gt; foo &lt;'">Clicky</a> 
<HR> 
<input type=button id=button2 value="&lt; foo &gt;"> - <a href=# onclick="ChangeName2()">Clicky</a> 
<HR> 
<input type=button id=button3 value="&lt; foo &gt;"> - <a href=# onclick="ChangeName3()">Clicky</a> 
<HR> 
<input type=button id=button4 value="&lt; foo &gt;"> - <a href=# onclick="ChangeName4('&gt; foo &lt;')">Clicky</a> 
</body></html> 

:

난 다음 샘플 HTML로 내 문제를 증류 한/JS는 (내 궁극적 문제 유니 자하지만 예로 중위/GT를 사용하고 있음에 유의) Safari, Chrome 및 FF3.6에서는이 동작이 동일합니다. onclick 핸들러에 정의 된 문자가있는 버튼 1과 4가 제대로 작동합니다. 다른 곳에서 정의 된 문자를 갖는 버튼 2와 3은 리터럴 &gt; 문자열을 표시합니다.

제 질문은 왜 문자열 정의의 위치가 중요합니까? 나는 주위에 일을하지만 네 브라우저가 모두 같은 방식으로 작동하기 때문에 Javascript의 기본 작업에 대한 지식이 부족한 것처럼 느껴진다.

감사

답변

1

된다 & 등을 사용함; 및 & lt; HTML 레벨에서 렌더링되고 따라서>와 <이됩니다. 자바 스크립트 수준에서, 그냥 문자열, 그리고 HTML로 (자사의 자바 스크립트) 렌더링되지 않습니다.

당신이 첫 번째 단추 코드를 변경하여 어떻게 볼 수 있습니다 : 링크를 마우스를 올려 놓고 브라우저의 상태 표시 줄을 검사 할 때, 당신은>와 < 기호를 보려면, 대신합니다

<a href="javascript:document.getElementById('button1').value = '&gt; foo &lt;'">Clicky</a> 

그 방법을 & gt; 및 & lt; 즉, HTML 코드 안에 있기 때문에 브라우저가 이미 렌더링했음을 의미합니다.

javascript와 동일한 결과를 얻으려면 & amp; gt; 또는 <을 자바 스크립트에 넣으십시오.

+0

쓰레기. 나는 그것이 명백 할 것임을 알았다. 실제로 당신이 방화범에서 언급 한 렌더링/렌더링되지 않은 것을 보았습니다. 나는 그 의미를 취하지 않았습니다. – jj33

+0

보너스 포인트를 얻으려면 javascript에서 호출하여 << '을 jj33

+1

안녕하세요 @ jj33, 그게 네이티브 기능이 있는지 모르겠다. 그러나 여기에 이것을 수행하는 일종의 유명한 라이브러리가 있습니다 : http://www.strictly-software.com/htmlencode 거기에 html_decode() 함수가 있습니다. 단지 여러분이 필요로하는 것입니다. –

관련 문제