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?
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) iinnerText
(niestandardowe) właściwości nie są identyczne . Na przykład,textContent
będzie zawierać tekst w elemencie<script>
whileinnerText
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 || "";
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) .
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 .
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.
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