Avatar billede thomas_b Nybegynder
31. december 2007 - 13:04 Der er 9 kommentarer

Tjekke om en tekst er i html-koden

Hej Eksperter...

Kan nogen af jer fremskaffe en kode der gør ta den tjekker html-koden for tekst og skal finde fx. teskten velkommen til, og derved aktivere en javascript-del ?

90 point til den rigtige kode ;)
Avatar billede w13 Novice
31. december 2007 - 13:17 #1
Altså hvis man ikke er bange for at bruge innerHTML (hvilket jeg normalt er), kan det vel let løses med nogenlunde dette:

if(document.getElementsByTagName("body")[0].innerHTML.indexOf("Velkommen til")>=0){
  //aktiver javascript-del
}
Avatar billede thomas_b Nybegynder
31. december 2007 - 13:23 #2
Hvad er der da galt med innerHTML ??
Avatar billede w13 Novice
31. december 2007 - 15:10 #3
innerHTML er noget som Internet Explorer (Microsoft) har fundet på og det er siden hen blevet indført i de andre browsere også. Det har dog intet med gyldig, standardiseret W3C-kode at gøre. Udover dette kan det også resultere i en bunke fejl, bl.a. fordi det roder lidt med DOM-bindingerne til elementerne.

Kort sagt: det er djævlens værk. =)

Nogle gange er det dog lettest at bruge.. =P
Avatar billede thomas_b Nybegynder
31. december 2007 - 17:04 #4
Men kan det laves på en anden måde så... evt. med andet script så ? Eller er det den eneste måde...?
Avatar billede thesurfer Nybegynder
31. december 2007 - 23:18 #5
Nu ved jeg ikke hvordan du har tænkt dig at kalde "checket", men her er et eksempel:

b = document.body;
for(var i = 0, len = b.childNodes.length; i < len; i++)
{
    if (b.childNodes[i].text.indexOf("Velkommen til") > -1)
    {
        alert("Fundet 'Velkommen til' i node " + i);
        // AKTIVER JAVASCRIPT DEL HER


        break;
    }
}


Man kan evt lave det om til en funktion, der bare returnerer true hvis teksten findes..
Avatar billede thesurfer Nybegynder
31. december 2007 - 23:25 #6
Eksempel:

function findes(tekst,insensitive)
{

b = document.body;
for(var i = 0, len = b.childNodes.length; i < len; i++)
{
    txt = b.childNodes[i].text;
    if (insensitive)
    {
        txt = txt.toLowerCase();
        tekst = tekst.toLowerCase();
    }
    if (txt.indexOf(tekst) > -1) return true;
}
return false;

}


Funktionen "findes" kaldes med 2 parametere:

1) teksten der skal sammenlignes med
2) som små bostaver er det samme som store bogstave, dvs: "hej" er det samme som "hEJ"

Altså:

alert(findes('Velkommen til',true));

Man kan så "aktivere" andet kode med:

if ( findes('Velkommen til',true) )
{
  // teksten findes, så der skal afvikles et eller andet
}
Avatar billede roenving Novice
01. januar 2008 - 15:08 #7
>>thesurfer

-- problematisk at bruge childNodes, da det kun afdækker et lag af hierarkiet, typisk vil en tekst være wrappet ind i andre elementer, og så vil du ikke fange det med ovenstående kode !-)

-- måske getElementsByTagName("*") kan være vejen frem !o]
Avatar billede thesurfer Nybegynder
01. januar 2008 - 15:42 #8
roenving> Takker :-)

Alle andre>

roenvings rettelse til tidligere kode (jeg håber at det ser rigtigt ud på Eksperten):

Erstat    b = document.body;    med      a = document.getElementsByTagName("*");

Erstat    b.childNodes.length;    med      a.length;

Erstat    b.childNodes[i].text;      med      txt = a[i].text;


Alt andet er det samme..
Avatar billede thesurfer Nybegynder
01. januar 2008 - 15:47 #9
Og så det faktisk passer i begge eksempler:

Erstat    b = document.body    med      a = document.getElementsByTagName("*")

Erstat    b.childNodes.length    med      a.length

Erstat    b.childNodes[i].text      med      txt = a[i].text


Jeg har bare fjernet ";" fra alle stederne.. hvis man erstatter teksten indtil ";" (hvis tegnet forekommer) med teksten indtil ";" (hvis tegnet forekommer), får man samme resultat.. :-)

Det nemmeste er nok at bruge Søg/Erstat (search/replace) i et tekstbehandlingsprogram (notepad, wordpad, editplus, notepad++, osv), og så ikke indtaste ";"..

:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester