webForumDet fria alternativet

Plocka bort html

8 svar · 294 visningar · startad av Jesper T

Jesper TMedlem sedan nov. 20017 144 inlägg
#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; 
}
nitro2k01Medlem sedan aug. 20039 342 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)

dectgapMedlem 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>
nitro2k01Medlem sedan aug. 20039 342 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?

dectgapMedlem 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?

Jesper TMedlem 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.

nitro2k01Medlem sedan aug. 20039 342 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.

dectgapMedlem 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>
Jesper TMedlem sedan nov. 20017 144 inlägg
#9

Härligt!

138 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)