2013-01-16 10 views
6

Background - in un editor articolo alimentato da TinyMCE per un'impresa in-house CMS dietro il grande luogo di media/sottenere elemento DOM originale innerHTML senza javascript elaborazione

HTML

<p>non-breaking-space: &nbsp; pound: &pound; copyright: &copy;</p> 

JS

console.log($('p').html()); 
console.log(document.getElementsByTagName('p').item(0).innerHTML); 

sia tornare

non-breaking-space: &nbsp; pound: £ copyright: © 

quando mi aspetto

non-breaking-space: &nbsp; pound: &pound; copyright: &copy; 

alcuni elementi mettere le entità invertiti (come sterlina e diritto d'autore), e alcuni sono conservati (spazio unificatore). Ho bisogno di un modo per ottenere l'HTML interno originale, tutto conservato, non uno che viene elaborato dal browser; è possibile?

Questo è per un plug-in TinyMCE che elabora l'input utilizzando jQuery e lo riporta indietro. Il contenuto viene caricato tramite un database, il plug-in sta elaborando i tag delle immagini e non ha voluto modificare il contenuto del testo. Il cambio automatico di alcune entità indietro ai personaggi prime non sarebbe troppo di un problema, ma -

  • Non possiamo modificare l'ingresso di redazione, anche se fosse minore
  • Noi applichiamo che questi devono essere entità prima di salvataggio a causa di alcuni problemi di compatibilità del browser sui nostri siti

vorrei usare questa risposta - https://stackoverflow.com/a/4404544/830171 - tuttavia non può, come il mio codice HTML è all'interno di una textarea che l'utente ha bisogno di modificare e che ho bisogno di correre jQuery DOM manipolazione su (tramite il plugin).

Un modo che posso pensare non è usare jQuery/DOM per elaborare i tag immagine che ho bisogno di cambiare, ma per usare regex come fanno molti plugin TinyMCE; ma poiché sono stato abbattuto nel regex to pull all attributes out of all meta tags per tentare qualsiasi regex su HTML, speravo in un modo migliore!

+1

Un 'console.dir' di un elemento con testo del genere non mostra alcuna proprietà con le entità conservati. Anche il debugger (in Chrome) mostra tutti gli elementi HTML senza entità conservate, quindi suppongo che tu non abbia fortuna. – pimvdb

risposta

1

Tinymce utilizza un iframe contenteditable per modificare il contenuto. Questo è il motivo per cui console.log($('p').html()); registrerà qualcos'altro.

utilizzare il seguente codice per ottenere il contenuto editor di puro:

tinymce.get('your_editor_id').getBody().innerHTML 
+0

Non vorrei concentrarmi troppo sulla parte TinyMCE della domanda, ma questo in generale come recuperare l'HTML originale, qui mostra lo stesso problema specifico del plugin TinyMCE - 'ed.onPostProcess.add ( \t function (a cura di, o) \t { \t \t console.log (o.content); // uscite £ \t \t console.log ($ ('' + o.content + ' '). html()); // output £' – gingerCodeNinja

Problemi correlati