webForumDet fria alternativet

Plocka bort html

JavaScript

8 svar · 296 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#1

Jag får inte denna att funka, har försökt att översätta ifrån vb.
Tips?

function RemoveHTML( strText ){ 
    var nPos1;
    var nPos2;
    nPos1 = indexOf(strText, "<") 
    while(nPos1-->0){ 
        nPos2 = indexOf(nPos1 + 1, strText, ">") 
        if(nPos2 > 0){ 
            strText = strText.substring(0,nPos1 - 1) + strText.substring(, nPos2 + 1) 
        }else {
            exit 
			}
        nPos1 = indexOf(strText, "<")
				}
    
    return strText; 
}
Medlem sedan aug. 20039 340 inlägg
#2

javascript har en del inbyggda funktioner för det där, så pröva detta:

<script>

function replaceAll(instring, src, dest){
	while(instring.indexOf(src)!=-1)
		instring=instring.replace(src, dest);
	return instring;
}

sss ="<html><b style=\"\">"

sss = replaceAll(sss, "<", "&lt;");
sss = replaceAll(sss, ">", "&gt;");
sss = replaceAll(sss, "\"", "&quot;");

alert(sss)

</script>

Annars ser jag också att det saknas ett argument i följande kommando: strText.substring(, nPos2 + 1)

Medlem sedan sep. 20021 655 inlägg
#3

Jag förstår JesperT som att han vill ta bort alla HTML-taggar, så att

<p>Lite text <i>och kursiv text</i></p>

blir

Lite text och kursiv text

Ett sätt att göra det:

<script type="text/javascript">
function RemoveHTML( strText ){
    var re = /<[^>]>/g;
    var strText = strText.replace(re, "");
    return strText; 
}

var htmlStr = "<html>aaa</html>";

document.write(RemoveHTML(htmlStr));
</script>

Eller på ett objektorienterat sätt:

<script type="text/javascript">
String.prototype.RemoveHTML = function(){
    var re = /<[^>]>/g;
    return this.replace(re, "");
}

var htmlStr = "<html>aaa</html>";

document.write(htmlStr.RemoveHTML());
</script>
Medlem sedan aug. 20039 340 inlägg
#4

Vilka browsers stödjer modifiering av prototypen för String på det där viset?
Verkar som ett potentiellt kompatibilitetsproblem.

Edit: En fråga till, varför ersätter replace ibland en förekomst av strängen?

Medlem sedan sep. 20021 655 inlägg
#5

nitro2k01 skrev:

Vilka browsers stödjer modifiering av prototypen för String på det där viset?
Verkar som ett potentiellt kompatibilitetsproblem.

Det stöds senast ifrån JavaScript 1.3, så det ska nog inte vara några problem.

nitro2k01 skrev:

Edit: En fråga till, varför ersätter replace ibland en förekomst av strängen?

Menar du i mitt eller ditt exempel?
Kan du berätta hur/när det blir fel?

Medlem sedan nov. 20017 144 inlägg
#6

Se mitt inlägg här:
http://www.webforum.nu/showthread.php?s=&threadid=108091&forumid=22
Det blir samma sak med javascript.

Medlem sedan aug. 20039 340 inlägg
#7

dectgap, ditt exempel fungerar inte! Jag prövade att byta ut document.write mot alert, och upptäckte att taggarna var kvar. Fast det märktes ju inte med d.w, eftersom taggarna slukades. För ett sånt här exempel kanske det är bättre att använda <b> eller liknande tagg så man direkt ser om det funkar.

Angående mitt problem, se separat tråd.

Medlem sedan sep. 20021 655 inlägg
#8

nitro2k01 skrev:

dectgap, ditt exempel fungerar inte! Jag prövade att byta ut document.write mot alert, och upptäckte att taggarna var kvar. Fast det märktes ju inte med d.w, eftersom taggarna slukades. För ett sånt här exempel kanske det är bättre att använda <b> eller liknande tagg så man direkt ser om det funkar.

Tjosan.
Jag glömde en "quantifier".

Om jag hade använt <b> hade det faktiskt gått bra, eftersom regexpen hade matchat ett-tecken-lång element.

Följande ska fungera bättre:

<script type="text/javascript">
String.prototype.RemoveHTML = function(){
    var re = /<[^>]+>/g;
    return this.replace(re, "");
}

var htmlStr = "</b>aaa</b>";

alert(htmlStr.RemoveHTML());
</script>

nitro2k01 skrev:

Angående mitt problem, se separat tråd.

Lägg bara till växlaren g, som står för global, till regexpen, så ska du se att det går bra.

JesperT skrev:

Se mitt inlägg här:
http://www.webforum.nu/showthread.php?s=&threadid=108091&forumid=22
Det blir samma sak med javascript.

Du vill alltså göra samma sak som metoden jag skrev här i inlägget, fast du vill utöka det så att även innehållet i script-element plockas bort?

Testa i så fall:

<script type="text/javascript">
String.prototype.RemoveHTML = function(){
    var re = new RegExp("<script([^>]|\n)*>(.|\n)*?</"+"script>|<[^>]+>", "gi");
    return this.replace(re, "");
}

var htmlStr = "<b>Välkommen!</b>\n\
<br>\n\
Text med html-format.\n\
...\n\
<script type=\"text/javascript\">\n\
<!--\n\
    if(document.getElementById){\n\
        document.write('<a href=\"../page.asp?id=pcont&strTitle='+ strTitle +'\" target=\"_blank\"><img src=\"../ico.gif\" border=\"0\" alt=\"\"></a>');\n\
};\n\
-->\n\</"+"script>";

alert(htmlStr.RemoveHTML());
</script>
Medlem sedan nov. 20017 144 inlägg
#9

Härligt!

274 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)