2011-10-01 7 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構文を使用する場合は、プラグインを作成することができます。

+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に追加する前にエスケープするには

次のように使用します。 $.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

関連する問題