2011-10-01 5 views
30

가능한 중복와 텍스트 노드 생성 :
Escaping text with jQuery append?추가하는 방법/앞에 추가/jQuery를

내 HTML은 다음과 같이 다소이다

<div id="selector">Hello World</div> 

지금은 '을 이 div에 텍스트를 추가하고 싶습니다. 나는 단순히

$('#selector').append(text); 

를 사용할 수 있지만,이 text에 특수 문자를 벗어날 것이라는 점을 알고있다. 또 다른 방법은 범위의 텍스트 래핑하는 것입니다 :

$('#selector').append($('<span>').text(text)); 

을하지만 불필요한 마크 업을 생성하기 때문에 이것은 추한입니다. 나는이 일을 어떤 jQuery를 스타일 방법이 있는지 궁금 해서요

$('#selector').append(document.createTextNode(text)); 

: 그래서 내 현재의 솔루션은 수동으로 TextNode를 만드는 것입니다?

+0

답변을 업데이트했습니다. – Tebo

답변

33

createTextNode 접근법이 가장 좋은 방법 일 것입니다. jQuery-ish 구문을 원한다면 플러그인을 만들 수 있습니다.

$.fn.appendText = function(text) { 
    return this.each(function() { 
     var textNode = document.createTextNode(text); 
     $(this).append(textNode); 
    }); 
}; 
+1

+1 제공된 다른 모든 메소드 *는 컨테이너 요소의 현재 내용을 덮어 씁니다. 이로 인해 이벤트 리스너와 DOM 속성이 사라지거나 재설정 될 수 있습니다. –

+0

@lonesomeday hehe 그건 깔끔하고 사용하기 쉬운 플러그인입니다. – Deeptechtons

-1

사용할 수 있습니다.

$.extend({ 
     urlEncode: function(value) { 
      var encodedValue = encodeURIComponent(value); 
      encodedValue = encodedValue.replace("+", "%2B"); 
      encodedValue = encodedValue.replace("/", "%2F"); 

      return encodedValue; 
     }, 
     urlDecode: function(value) { 
      var decodedValue = decodeURIComponent(value); 
      decodedValue = decodedValue.replace("%2B", "+"); 
      decodedValue = decodedValue.replace("%2F", "/"); 

      return decodedValue; 
     } 
}); 

DOM에 추가하기 전에 HTML 문자를 이스케이프 처리합니다.

다음과 같이 사용하십시오. $.urlEncode(value)

사용 중; $('#selector').append($.urlEncode(text));

업데이트 #은

1이 $('#selector').html($('#selector').html() + text);

나는 이것이 당신이 원하는 무엇 이었는가 의심 할 수있다.

+0

이 방법이 효과가 있지만 실제로 찾고있는 것이 아닙니다. 텍스트가 'Strong'이면 정확하게 표시해야합니다. 귀하의 코드가 생성됩니다 :'% 3Cb % 3EHi % 3C % 2Fb % 3E' – Niko

+0

방금 ​​업데이 트를 게시했습니다. – Tebo

+0

업데이트 해 주셔서 감사합니다. 그러나 실제로 이것은 잘 작동하지 않습니다. 이제 ** Strong **이 표시되지만 'Strong'을 표시하고 싶습니다. – Niko

2

$.text()는 파라미터로서의 기능을 수용한다. 이 함수는 인덱스와 현재 텍스트를받습니다. 함수의 반환 값은 새 텍스트로 설정됩니다.

http://jsfiddle.net/4SvgV/1/

+0

고마워, 이건 좋은 생각이야. 그러나 불행히도 컨테이너 내부의 모든 요소는 무시됩니다. 업데이트 된 바이올린 : http://jsfiddle.net/4SvgV/2/ – Niko

관련 문제