Jak usunąć znaczniki HTML z napisów w JavaScript? [duplikat]

Możliwy duplikat:
Usuń HTML z tekstu JavaScript

Jak mogę usunąć HTML z ciągu znaków w JavaScript?

Author: MobileDream, 2011-02-15

4 answers

Używanie parsera przeglądarki jest prawdopodobnie najlepszym rozwiązaniem w obecnych przeglądarkach. Będą działać następujące, z następującymi zastrzeżeniami:

  • Twój HTML jest poprawny w elemencie <div>. HTML zawarty w znacznikach <body> lub <html> lub <head> nie jest poprawny w <div> i dlatego może nie być poprawnie parsowany.
  • textContent (standardowe właściwości DOM) i innerText (niestandardowe) właściwości nie są identyczne . Na przykład, textContent będzie zawierać tekst w elemencie <script> while innerText nie będzie (w większości przeglądarek). Dotyczy to tylko IE textContent.
  • HTML nie zawiera elementów {[9] }.
  • HTML nie jest null
  • HTML pochodzi z zaufanego źródła. Użycie tego z dowolnym HTML pozwala na wykonanie dowolnego niezaufanego JavaScript. Ten przykład pochodzi z komentarza Mike ' a Samuela na temat zduplikowanego pytania: <img onerror='alert(\"could run arbitrary JS here\")' src=bogus>

Kod:

var html = "<p>Some HTML</p>";
var div = document.createElement("div");
div.innerHTML = html;
var text = div.textContent || div.innerText || "";
 186
Author: Tim Down,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:05
cleanText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");

Pochodzi z tej strony (web.achive) .

 193
Author: ReactiveRaven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 13:24:17
var html = "<p>Hello, <b>World</b>";
var div = document.createElement("div");
div.innerHTML = html;
alert(div.innerText); // Hello, World

To właściwie najlepszy sposób, pozwalasz przeglądarce robić to, co robi najlepiej-parsować HTML.


Edit: jak wspomniano w komentarzach poniżej, nie jest to najbardziej cross-browser rozwiązanie. Najlepszym rozwiązaniem między przeglądarkami byłoby rekurencyjne przechodzenie przez wszystkie dzieci elementu i łączenie wszystkich znajdujących się węzłów tekstowych. Jednak, jeśli używasz jQuery, to już robi to za Ciebie:

alert($("<p>Hello, <b>World</b></p>").text());

Sprawdź metodę text .

 39
Author: Felix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-15 11:01:52

Wiem, że to pytanie ma akceptowaną odpowiedź, ale czuję, że nie działa we wszystkich przypadkach.

Dla kompletności i ponieważ spędziłem nad tym zbyt dużo czasu, oto co zrobiliśmy: skończyło się na użyciu funkcji z php.js (która jest całkiem fajną biblioteką dla tych bardziej zaznajomionych z PHP, ale także robiących trochę JavaScript co jakiś czas):

Http://phpjs.org/functions/strip_tags:535

Wydawało się, że jest to jedyny fragment kodu JavaScript, który z powodzeniem radziłem sobie z różnymi rodzajami danych wejściowych, które wepchnąłem do mojej aplikacji. Czyli bez łamania - zobacz moje komentarze dotyczące tagu <script /> powyżej.

 22
Author: Till,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 16:14:10