2013-01-16 42 views
6

Background - w edytorze artykułu zasilany przez TinyMCE dla przedsiębiorstwa w domu CMS za dużym terenie mediów/sdostać oryginalnego elementu DOM innerHTML bez przetwarzania javascript

HTML

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

JS

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

zarówno zwrotny

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

gdy Czekam

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

niektóre elementy dostać ich podmioty odwrócone (jak funta i praw autorskich), a niektóre są zachowane (non-breaking space). Potrzebuję sposobu, aby uzyskać oryginalny wewnętrzny HTML, wszystkie zachowane, a nie taki, który jest przetwarzany przez przeglądarkę; czy to jest możliwe?

To jest dla wtyczki TinyMCE, która przetwarza dane wejściowe za pomocą jQuery i umieszcza je z powrotem. Zawartość jest ładowana przez bazę danych, wtyczka przetwarza tagi graficzne, nie chce w ogóle modyfikować treści tekstowej. Automatyczna zmiana niektórych podmiotów z powrotem do surowych znaków nie byłoby zbyt wielkim problemem, ale -

  • Nie możemy modyfikować wejście redakcyjny, nawet jeśli to były drobne
  • Mamy egzekwować że musi to być podmioty przed ich uratować z powodu pewnych problemów z kompatybilnością przeglądarek na naszych stronach

użyłbym tej odpowiedzi - https://stackoverflow.com/a/4404544/830171 - jednak nie może, jak mój HTML kod jest wewnątrz textarea, że ​​użytkownik musi zmieniać i że trzeba uruchomić jQuery DOM manipulacja w (za pomocą wtyczki).

Jednym ze sposobów, w jaki mogę myśleć, to nie używać jQuery/DOM do przetwarzania znaczników obrazu, które muszę zmienić, ale do używania regex jak wiele wtyczek TinyMCE; ale odkąd zostałem zestrzelony w regex to pull all attributes out of all meta tags za próbowanie jakiegokolwiek wyrażeń regularnych w HTML, liczyłem na lepszy sposób!

+1

'console.dir' elementu z takiego tekstu nie wykazuje żadnych właściwości z podmiotami zachowanych. Nawet debugger (w Chrome) pokazuje wszystkie elementy HTML bez elementów, więc domyślam się, że nie masz szczęścia. – pimvdb

Odpowiedz

1

Tinymce używa contenteditable iframe do edycji treści. To jest powód, dla którego console.log($('p').html()); będzie rejestrować coś innego.

Użyj następującego kodu, aby uzyskać czystą treść Redaktor:

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

Nie skupiałbym się zbytnio na części TinyMCE pytania, ale to ogólnie jak odzyskać oryginalny HTML, tutaj pokazuje ten sam problem specyficzny dla wtyczki TinyMCE - 'ed.onPostProcess.add ( \t funkcja (ed O) \t { \t \t console.log (o.content) // wyjścia £ \t \t console.log ($ ('' + o.content + „ '). html()); // wyprowadza £ ' – gingerCodeNinja

Powiązane problemy