2011-10-01 16 views
30

Eventuali duplicati:
Escaping text with jQuery append?Come aggiungere/anteporre/creare un nodo di testo con jQuery

mio HTML è un po 'come questo:

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

Ora io' mi piacerebbe aggiungere del testo a questo div So che avrei potuto usare semplicemente

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

, ma questo non sarebbe sfuggire caratteri speciali in text. Un altro modo è quello di avvolgere il testo in un arco:

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

Ma questo è brutto, perché crea markup inutili. Quindi la mia soluzione attuale è quella di creare manualmente un TextNode:

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

Mi chiedevo se c'è qualche jQuery stile modo per fare questo?

+0

Ho aggiornato la mia risposta. – Tebo

risposta

33

L'approccio createTextNode è probabilmente il modo migliore per andare. Se si desidera avere una sintassi jQuery-ish, è possibile creare un plug-in.

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

+1 Tutti gli altri metodi forniti * sovrascrivono * il contenuto corrente dell'elemento contenitore, che può far scomparire/reimpostare i listener di eventi e le proprietà DOM. –

+0

@lonesomeday hehe è un plugin facile da usare – Deeptechtons

-1

È possibile utilizzare;

$.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; 
     } 
}); 

per sfuggire caratteri HTML prima di aggiungere al DOM.

Utilizzare come; $.urlEncode(value)

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

Update # 1

Potreste questa $('#selector').html($('#selector').html() + text);

ho sospettato che questo era quello che volevi.

+0

Funziona, ma non è quello che stavo cercando: se il mio testo è 'Strong' dovrebbe visualizzare esattamente questo. Il tuo codice produce: '% 3Cb% 3EHi% 3C% 2Fb% 3E' – Niko

+0

Ho appena pubblicato un aggiornamento. – Tebo

+0

Grazie per l'aggiornamento, ma in realtà questo non funziona altrettanto bene. Ora mostrerebbe ** Forte ** ma vorrei visualizzare 'Strong'. – Niko

2

$.text() accetta anche una funzione come parametro. Questa funzione riceverà un indice e il testo corrente. Il valore di ritorno della funzione verrà impostato come nuovo testo.

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

+0

Grazie, questa è una buona idea. Ma sfortunatamente tutti gli elementi all'interno del contenitore vengono sovrascritti, vedi il fiddle aggiornato: http://jsfiddle.net/4SvgV/2/ – Niko

Problemi correlati