Avatar billede benneharli Juniormester
31. marts 2008 - 11:13 Der er 15 kommentarer og
1 løsning

Menu med JavaScript

Hej

Jeg skal bruge en menustruktur der automatisk (når man åbner siden) "scanner" en mappe + undermapper på serveren, og laver en menustruktur efter det. Jeg kan ikke bruge f.eks. da det er en mappe der skal ligge lokalt på en PC hvor der ikke er webserver.

Eks:

Rod
  + Mappe 1
  - Mappe 2
    + Mappe 2_1
    - Mappe 2_2
      Fil 1
      Fil 2
      Fil 3
    + Mappe 2_3
    Fil 1
  + Mappe 3

/Benji
Avatar billede w13 Novice
31. marts 2008 - 12:42 #1
Du mangler vist et par ord i linjen "Jeg kan ikke bruge f.eks. da det er(...)", men gætter på du mener Server-Side sprog (såsom ASP og PHP).
Men uden disse er du på den, da JavaScript ikke kan læse mapper og deres indhold.
Avatar billede benneharli Juniormester
31. marts 2008 - 13:15 #2
Hmm... Og der ikke nogen standard html funktioner jeg kan bruge? Som sagt, det er noget der skal ligge i en mappe lokalt på en PC der ikke har nogen webserver installeret...

hehe, ja, der mangler lige PHP/ASP/... :-$

/Benji
Avatar billede w13 Novice
31. marts 2008 - 13:57 #3
Der er intet at gøre, er jeg bange for.

Altså i så fald skulle man have en Java-applikation til at finde mappeindhold og sende det til JavaScript, men en sådan har jeg ikke.
Avatar billede jokkejensen Novice
31. marts 2008 - 13:59 #4
kan du ikke manuelt varetage et xml ark med stier til filerne ? (kender ikke til størrelsen)
Avatar billede jokkejensen Novice
31. marts 2008 - 14:00 #5
ellers kør en dir /s -> site.txt fra roden af websitet, og request den txt fil asynkront og find html filerne gennem js, så sparer du da dit java led.
Avatar billede benneharli Juniormester
31. marts 2008 - 14:06 #6
Kan bedre lide den sidste mulighed... Hvordan nærmere?
Avatar billede jokkejensen Novice
31. marts 2008 - 17:06 #7
lokaliser website's rod gennem en dos prmt, opret evt en .bat i samme dir:
Skriv nedenstående linie, lokaliser filerne gennem regex.

dir *.html /s -> liste.txt

/J
Avatar billede jokkejensen Novice
31. marts 2008 - 17:07 #8
lokaliser filerne gennem regex med JS.

Det bliver bare lidt svært at kategorisere dem yderligere end med mappe navn, men jeg tror nok en directory listing gennem nt batch kan sorteres lidt.
Avatar billede olebole Juniormester
31. marts 2008 - 21:04 #9
<ole>

Du kunne lave en lille HTA (HyperText Application), som skriver, læser og retter XML-filer. Kald f.eks. denne fil for 'MyXML.hta' og dobbeltklik på den:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<HTA:APPLICATION ID="oXMLAPP"
    APPLICATIONNAME="myXML"
    VERSION="1.0"
    BORDER="thin"
    BORDERSTYLE="normal"
    CAPTION="yes"
    ICON=""
    MAXIMIZEBUTTON="yes"
    MINIMIZEBUTTON="yes"
    SHOWINTASKBAR="yes"
    SINGLEINSTANCE="yes"
    SYSMENU="yes"
    WINDOWSTATE="normal">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>MyXML</title>
<style type="text/css">
html, body {
    height: 100%;
    padding: 0;
    margin: 0;
    background: buttonface;
    font: 11px tahoma, sans-serif;   
}
</style>
<script type="text/JavaScript">
function foo() {
    var oXML = new ActiveXObject("Microsoft.XMLDOM");
    oXML.async = false;
    oXML.loadXML("<?xml version='1.0' encoding='utf-8'?><data></data>");

    var o = oXML.createElement("test");
    oXML.documentElement.appendChild(o);
    o.appendChild( oXML.createTextNode("En eller anden tekst") );

    oXML.save("test.xml");
    alert("Filen 'test.xml' blev udskrevet.");
}
function bar() {
    var oXML = new ActiveXObject("Microsoft.XMLDOM");
    oXML.async = false;
    oXML.load("test.xml");
    document.getElementById("displ").firstChild.nodeValue = "Filen 'test.xml' indeholder:\r\n\r\n" + oXML.xml;
}
</script>
</head>
<body>

<p><button onclick="foo()">Skriv</button>
    <button onclick="bar()">Læs</button></p>

<pre id="displ">&nbsp;</pre>

</body>
</html>

En HTA-fil opretter en specialinstans af IE med udvidede sikkerhedsregler. Reference, m.m. finder du her:
    http://msdn2.microsoft.com/en-us/library/ms536471(vs.85).aspx

/mvh
</bole>
Avatar billede olebole Juniormester
01. april 2008 - 02:44 #10
Så fik jeg tid til at lege lidt. Du kan faktisk godt gøre, som du gerne vil:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<HTA:APPLICATION ID="oXMLAPP"
    APPLICATIONNAME="myXML"
    VERSION="1.0"
    BORDER="thin"
    BORDERSTYLE="normal"
    CAPTION="yes"
    ICON=""
    MAXIMIZEBUTTON="yes"
    MINIMIZEBUTTON="yes"
    SHOWINTASKBAR="yes"
    SINGLEINSTANCE="yes"
    SYSMENU="yes"
    WINDOWSTATE="normal">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>MyXML</title>
<style type="text/css">
html, body {
    height: 100%;
    padding: 0;
    margin: 0;
    background: buttonface;
    font: 11px tahoma, sans-serif;   
}
</style>
<script type="text/JavaScript">
function fooBar(oDir) {
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var oFolder = fso.getFolder(oDir);
    var fc = new Enumerator(oFolder.files);
    var aFiles = [];
    var oItem, sStr;
    while (!fc.atEnd()) {
        oItem = fc.item();
        aFiles.push(oItem);
        sStr = "Filename: "+oItem.name+"\r\nFilesize: "+oItem.size
            + "\r\n-------------------------------------------\r\n";

        document.getElementById("displ").firstChild.nodeValue += sStr;
        fc.moveNext();
    }
    // Alle fil-objekter ligger nu også i array'et 'aFiles'
    // - hvis du evt. skal bruge det til noget. Eksempel:
    alert(aFiles[0].name + " :: " + aFiles[0].size);
}
</script>
</head>
<body>

<p><button onclick="fooBar('c:/')">test</button></p>

<pre id="displ">&nbsp;</pre>

</body>
</html>

Jeg skriver ikke hele programmet for dig, men du kan gå på opdagelse i filsystem objektets reference her:
    http://msdn2.microsoft.com/en-us/library/6kxy1a51(VS.85).aspx
Avatar billede olebole Juniormester
01. april 2008 - 03:20 #11
Sådan ... så må du selv få lagt events på, hvis man skal kunne åbne og lukke mapperne:

<script type="text/JavaScript">
function fooBar(oPar, sDir) {
    var oItem, oUl, oLi, oA, fso, oFolder, fc;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    oFolder = fso.getFolder(sDir);
    fc = new Enumerator(oFolder.subFolders);
    oUl = document.createElement("ul");
    oPar.appendChild(oUl);
    while (!fc.atEnd()) {
        oItem = fc.item();
        oLi = document.createElement("li");
        oUl.appendChild(oLi);
        oLi.appendChild(document.createTextNode(oItem.name));
        fooBar(oLi, sDir+oItem.name+"/");
        fc.moveNext();
    }

    fc = new Enumerator(oFolder.files);
    while (!fc.atEnd()) {
        oItem = fc.item();
        oLi = document.createElement("li");
        oUl.appendChild(oLi);
        oA = document.createElement("a");
        oLi.appendChild(oA);
        oA.setAttribute("href",oItem.name);
        oA.appendChild(document.createTextNode(oItem.name));
        fc.moveNext();
    }

}

var oDispl = null;
window.onload = function() {
    oDispl = document.getElementById("displ");
}
</script>

- og med denne HTML:

<p><button onclick="fooBar(oDispl, 'c:/Program Files/Internet Explorer/')">test</button></p>

<div id="displ"></div>
Avatar billede benneharli Juniormester
03. april 2008 - 20:24 #12
Så er jeg tilbage... Har ikke lige internet derhjemme for tiden :-(

Kan se du har to indlæg her til sidst. Hvilket skal jeg bruge? Skal jeg bruge det sammen? Hvilken rækkefølge? Undskyld hvis det går lidt trægt :-(

/Benji
Avatar billede benneharli Juniormester
03. april 2008 - 23:03 #13
Kæft det er i orden ;-)

Kun lige 3 ting.

1: Hvis jeg kører den lokalt på min maskine fungerer det fint, men hvis jeg lægger filen på en anden maskine og kører filen fra min maskine, kommer der en fejl:

Automation-serveren kan ikke oprette objektet

Hvad kan det være?

2: Ville være rart at kunne starte "sammeklappet" og så folde ud - ved godt du skriver det, men er totalt newbie :-(

3: Ville være rart hvis de genererede links rent faktisk virkede...

Hvis du synes kan jeg sagtens starte en ny tråd på den her. Smid allerede gerne nu et svar...
Avatar billede olebole Juniormester
03. april 2008 - 23:46 #14
1) Det skyldes sikker de forskellige rettighedsområder. Tror ikke, du umiddelbart kan gøre noget ved det.

2) Kik lidt rundt på Eksperten. Der er masser af spmørgsmål/svar om træ-menuer

3) Ja, stien skal naturligvis være rigtig - hvilket kun du kan sørge for. Derudover burde de da virke  :)
Avatar billede benneharli Juniormester
04. april 2008 - 00:16 #15
Kan ikke lige få stien til at være rigtig. Den tager "grund" fra den lokation hvor jeg kører filen fra, og lægger ikke selv noget til når den ligger i en undermappe :-(

Nå, men smid et svar ;-)
Avatar billede olebole Juniormester
04. april 2008 - 01:18 #16
Ahhh ... sorry:
    oA.setAttribute("href",sDir+oItem.name);  ;o)
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