webForumDet fria alternativet

Klarar JS av detta här?

6 svar · 450 visningar · startad av haider

haiderMedlem sedan jan. 2003956 inlägg
#1

Jag använde en gång en array-lösning som såg ut så här nånting

var objekt=new Array();

objekt[0]=["...","...","...","...","...",];
objekt[1]=["...","...","...","...","...",];
objekt[2]=["...","...","...","...","...",];
osv

Om jag ser detta som en slags databas, med information, så undrar jag: Har detta en begränsning?
Hur många objekt klarar den av?
Blir det en belastning för minnet?

Nu kommer det roliga:
Kan man läsa ut informationen ur en div tag, ex ett nummer, och sen jämföra det med en array, för att hitta rätt objekt?

Ex.

objekt[12]=["101010","Text 1","Text 2","Text 3","TExt 4",];

i en div enligt:
<div id="number">101010</div>
.. står numret 101010 att finna.

Kan man då via javascript, leta reda på number i dokumentet, och sedan uthämta data från arrayn beroende på vilket nummer som "number" har?

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Självklart blir arrayen mer minneskrävande ju större den är. Om det är inbyggt i JavaScript-motorn en begränsning, vet jag inte. Annars är väl begränsningen minnet i datorn.

Problemet med ditt förslag med att hämta en <div>s id-nummer och mappa den i en array, är att id-attributet inte får vara numeriskt.

/Red.: Vid närmare eftertitt verkar det inte finnas någon inbyggd begränsning.

haiderMedlem sedan jan. 2003956 inlägg
#3

Lite mer detaljer...

Yo Pete.

Angående minne, hur mycket minne tros det kunna ta?
Finns det något annat sätt att lagra en databas, som kan läsas in via javascript? Saken är den, att jag inte kan programmera, men jag kan åtminstone begripa mig på JS.

Jag förklarar lite senare exakt hur jag tänkt, kanske kan man lösa det på annat sätt ändå.

Angående DIV taggen. Jag skrev "number" som ID, men jag syftade på ordet "number" och inte något nummer. ID kan lika gärna heta "artikel" eller "blabla".

Så frågan återstår, om jag har en array - jag vet inte exakt vad komponenterna i en array kallas. Så jag beskriver det rent "bildligt".

...
objekt[11]=["101009","Hus","Villa","Garage","Balkong",];
objekt[12]=["101010","Dator,"Skrivare","Floppy","C64",];
objekt[13]=["101011","Bil","Motorcykel","Kanot","Flygplan",];
... osv

Om vi tittar på det fetstilta, så är den första komponenten i array nummer 12 (heter det så?), ett nummer, nämligen 101010

Så min tanke är, att skriptet ska söka efter DIV:en som jag nämnde ovan, den som ex. heter "ARTIKEL", och utläser dess innehåll, som t.ex. är :

<div ID="artikel">101010</div>

När skriptet hittar numret 101010 som är samma innehåll som första "komponenten" i array nummer 12, så ska scriptet ta fram den data som array nummer 12 har lagrat, alltså: Dator, Skrivare, Floppy och C64.

Går det?

Saken är den, att jag vill skapa en slags databas med en mängd information.
Olika script ska "skriva ut" med document.write information som tas ut ur databasen på diverse olika ställen i en tabell.

I en tabell som ser ut så ungefär

[Art.nr]...... [101010]
[Pris] ........ [500 kr]
[Modell]..... [M45]
[Vikt]......... [1,3 kg]

Vi föreställer oss att ovanstående är tabeller; De till vänster är statiska, medan de till höger är dynamiska utom första, alltså art nr.
Den fyller man i manuellt. Ett skript läser numret som står där, och sedan fyller i pris, modell o vikt utifrån databasen.

Hoppas det är tydligt förklarat, låt mig veta annars.
Tack i förhand

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Det bästa är ju definitivt att använda sig av en konventionell databas och sköta allting på serversidan med hjälp av ett lämpligt språk.

Men för att illustrera med ett exempel på hur du kan åstadkomma det du målar upp:

var objekt = new Array();
objekt[0] = [...];
...
objekt[10]=[...];
objekt[11]=["101009","Hus","Villa","Garage","Balkong"];
objekt[12]=["101010","Dator,"Skrivare","Floppy","C64"];
objekt[13]=["101011","Bil","Motorcykel","Kanot","Flygplan"];

function f(id){
    var elm = document.getElementById(id);

    if (!elm){
        alert("No such DIV");
        return;
    }

    var s = objekt.length;
    for (var i = 0; i < s; ++i){
        if (objekt[i][0] == elm.innerHTML){
            alert(objekt[i]);
            return;
        }
    }

    alert("No record found for '"+ elm.innerHTML +"'");
}

<a href="java&#115;cript:void(f('artikel'))">find 'artikel'</a>

<div id="artikel">101010</div>
haiderMedlem sedan jan. 2003956 inlägg
#5

Level II

Aight Pete, o tack för hjälpen så långt.

Time for the next level ;)

Först så kan jag visa koden som jag nyttjade, baserad på din kod (nedanstående är lite förenklad)

var s = objekt.length;
    
for (var i = 0; i < s; ++i){
 if (objekt[i][0] == elm.innerHTML){
parent.document.getElementById("pris").innerHTML = objekt[i][1];
parent.document.getElementById("modell").innerHTML = objekt[i][2];
parent.document.getElementById("vikt").innerHTML = objekt[i][3];

Vad den alltså gör, är att plocka ut datan från "databasen".

Men ett par frågor återstår

1. Om man skulle välja att använda sig av en ex. PHP databas, eller nåt annat - klarar javascript att komma åt den på samma sätt?
Jag vill nämligen plocka ut data från databasen och använda den i samband med .innerHTML eller document.write.

2. Jag har flera tabeller (skilda från varandra) med div-taggar inne i. I samtliga tabeller finns div:ar med samma ID. Finns nån möjlighet att köra JS "inifrån" tabellen och köra dem "lokalt" så att när jag använder ovanstående script, där den letar efter ett ID, så hittar den ID'n som är i samma tabell och inte i de andra.
Varför?

Jag vill skapa tabell-block som ser ut så:

[art: 100][ID="pris"]
[art: 101][ID="pris"]
[art: 102][ID="pris"]
osv

Tanken var att jag endast fyller i ett unikt artikelnummer, så fyller den i innerHTML för dess respektive DIV.
Frågan är dock om man kan förhindra dem att krocka, eller om det finns ett annat sätt.

GuffaMedlem sedan juni 2004533 inlägg
#6

1. En "PHP databas"? Jag antar att du med det menar en MySQL-databas?

Ja, ifall databasen tillåter uppkopplingar utifrån så kan du komma åt den med javascript. Det är dock inte en särskilt god idé (läs: dååååååååålig idé!), eftersom vem som helst då kan kolla i koden och administrera din databas...

Använd serverkod för att hämta datat och lägga in det i javascript-koden.

2. Du kan inte ha flera element med samma id i en sida. Ifall du struntar i det och hoppas att det fungerar ändå, så måste du själv loopa igenom elementen i tabellen för att hitta det element som har ett visst id.

haiderMedlem sedan jan. 2003956 inlägg
#7

1. Hehe, bådar illa. Tja, jag antar att jag inte är så haj på detta med databaser - jag trodde att man kunde få en slags åtokmst i stil med JS-metoden jag använde, men angtagligen funkar det helta annorlunda.

2. tja, jag hoppades här att det skulle funka, men jag kan nog lösa det på annat sätt.

tack så mycket för feedbacken!

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