Avatar billede dotcom1 Nybegynder
05. maj 2010 - 20:44 Der er 20 kommentarer og
1 løsning

Hjælp til indexOf, etc.

Hej.

Jeg skal fange en del af en url.

Url'en har typisk en syntax som denne:

.../vacancy/application/6614dda7479a472d1561ad448d9c2d7b/410563/64073?iso=gb

Men:

Den sidste del (?iso=gb) er der ikke altid, men ellers er syntaksen altid .../vacancy/application/32-tal-og-cifre/fem-eller-seks-cifre/xxxxx

Jeg har brug for at fange de sidste cifre - i dette tilfælde 64073.

Jeg har forsøgt mig med noget lignende:

<script language="JavaScript" type="text/javascript">
var dep = window.location.href.slice(window.location.href.indexOf('/application/') - 5).split(',');

if (dep == "64073?iso=dk")
{
    var banner = '/files/LB.jpg'
    var url = 'http://www.website3.com'
}
else if (dep == "64074?iso=dk")
{
    var banner = '/files/LT.jpg'
    var url = 'http://www.website2.com'
}
else
{
    var banner = '/files/LK.jpg'
    var url = 'http://www.website.com'
}
</script>


Men der går lidt ged i mit index - sikkert fordi jeg ikke ved nok om hvordan det virker...

Kan nogen hjælpe? Eller er der en anden, smartere måde at gøre det på?
Avatar billede Slettet bruger
05. maj 2010 - 21:12 #1
Tip: Der findes også en "lastIndexOf" function i javascript.
- derefter skulle det være en smal sag : )
Avatar billede dotcom1 Nybegynder
05. maj 2010 - 21:19 #2
Hej.

Okay, lyder interessant. Kan du hjælpe med at få det til at virke?
Avatar billede olebole Juniormester
05. maj 2010 - 21:30 #3
<ole>

Du kan læse om lastIndexOf her:
    https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/lastIndexOf

Men mon ikke det er fiksere at bruge en RegExp?



/mvh
</bole>
Avatar billede Slettet bruger
06. maj 2010 - 10:08 #4
var s = "http://www.domain.dk/vacancy/application/6614dda7479a472d1561ad448d9c2d7b/410563/64073?iso=gb"

alert( s.substring(s.lastIndexOf("/")+1).split("?")[0] )

NB:
RegExp er "cool" - men ligner noget der er løgn...
Feg bruger det kun når der kan spares mindst 20 linjers "rigtig" kode.
- F.eks. til test af at en indtastet eMail-adresse er gyldig
Avatar billede olebole Juniormester
06. maj 2010 - 10:26 #5
Det er muligt, du mener, RegExp ligner løgn, men de er som skabt til at løse spørgerens problem - i modsætning til lastIndexOf  ;o)

Spørgeren skriver: "Den sidste del (?iso=gb) er der ikke altid".

Det betyder, vi ikke ved, hvad der grænser op til 'nålen' - altså et mønster ... altså RegExp  =)
Avatar billede dotcom1 Nybegynder
06. maj 2010 - 11:40 #6
Hej og tak for jeres svar.

Jeg er ikke så skarp til dette - hvordan bruges Oles forslag i praksis?

Scriptet skal selv nappe url'en i browseren. Hvordan bruger jeg det til at tildele et billede alt efter hvilke cifre, jeg får? Jvf. mit eget forslag?

Jeg kalder min eksisterende funktion med dette:

<script type="text/javascript">                 
document.write('<a href='+url+' target=\"_blank\"><img src='+banner+' /></a>');
</script>

Hvordan gøres noget lignende med Oles funktion?
Avatar billede olebole Juniormester
06. maj 2010 - 12:12 #7
Det er ikke til at vide, når vi ikke ved, hvordan det skal bruges. Hvad skal der stå som url/href i linket og hvad skal stå som src i billed elementet?

document.write bør du nok undgå, så prøv at beskrive nærmere, hvordan det skal bruges. Der skal vel også klistres en fil-extension på tallene(?)
Avatar billede dotcom1 Nybegynder
06. maj 2010 - 12:30 #8
Ok. Jeg har brug for at vise et banner med tilhørende webadresse alt efter hvilken talsekvens, der findes i browserens aktuelle url.

Hvis den aktuelle url i browseren er f.eks. http://www.domain.dk/vacancy/application/6614dda7479a472d1561ad448d9c2d7b/410563/64073?iso=gb (eller uden ?iso=gb), så ville jeg gerne trække tallene "64073" ud og bruge disse tal til at styre hvilket billede og webadresse, der skal vises på siden.

Jeg har en fire-fem forskellige talsekvenser, som jeg gerne vil kunne angive i scriptet, f.eks. 64073, 64074, osv. og gøre, således at hvis det er "64073" der vises det bestemte sted i url'en, så printes det tilsvarende logo (og webadresse-link) på siden.

Url'erne kan alså være:
/vacancy/application/6614dda7479a472345654d448d9c2d7b/410563/64073?iso=gb
/vacancy/application/6214dda7479a472d1561ad4223341d7b/412555/64074
/vacancy/application/6631dda7479a472d1561ad4498786678/410559/64075?iso=gb
osv.

Så syntaksen på url'erne er i princippet den samme - de vil altid starte med vacancy/application/ mens resten af tallene kan være forskellige.

Men det er den del med fed, jeg gerne vil kunne bruge til at bestemme visningen af et bestemt logo på siden.

Håber det giver mere mening. Jeg kan desværre ikke vise et live-eksempel.
Avatar billede olebole Juniormester
06. maj 2010 - 12:39 #9
Du svarer ikke på noget af det, jeg spørger om. Læs mit spørgsmål igen  ;o)
Avatar billede dotcom1 Nybegynder
06. maj 2010 - 13:06 #10
Ok, en billed src kunne være www.domain.dk/files/LB.jpg og en url/href kunne være http://www.website3.com.

Er ikke helt sikker på hvad du mener at klistre en filextension på tallene...

Mvh.
Avatar billede Slettet bruger
06. maj 2010 - 17:01 #11
Det er jo bare helt almindelige "links" - det Ole spørger om er (hvis jeg må være så fri):

Hvordan skal det fremfundne nummer (f.eks: 64073) påvirke dine banner-billeder/links ?

Og, ved nærmere eftertanke, skal det overhovedet ske i browseren (med javascript) ?
- Var det ikke bedre at klare det på serveren, inden siden leveres til brugeren.

=> olebole:
Problemet med RegExp er at de er notorisk vanskelige at læse/rette - 2 år efter.
- hvor "min metode" jo (næsten) kan læses som engelsk, direkte.
(Og den har ingen problemer, hvis "?iso=gb" skulle mangle til sidst)
Avatar billede dotcom1 Nybegynder
06. maj 2010 - 20:48 #12
Hej.

Jeg har desværre kun mulighed for at gøre det client-side.

Jeg forestiller mig noget i retning af den måde det gøres på i mit kluntede forsøg i min første post:

if (dep == "64073")
{
    var banner = '/files/LB.jpg'
    var url = 'http://www.website3.com'
}
...

- altså på en måde, hvor jeg kan tilføje alle de numre/bannere der er behov for.

Og så skal jeg kunne vise det på siden - ligeledes som jeg har gjort et forsøg på her:
<script type="text/javascript">               
document.write('<a href='+url+' target=\"_blank\"><img src='+banner+' /></a>');
</script>
- men måske på en smartere måde?
Avatar billede Slettet bruger
06. maj 2010 - 21:08 #13
Det ser da glimrende ud : )
- document.write dur ikke i XHTML, men hvis ikke du bruger dén doctype, så er der ingen is på koen.
(Folk uden javascript aktiveret, ikke vil se det - men det er 1 ud af en million, pyt)
Avatar billede dotcom1 Nybegynder
06. maj 2010 - 21:14 #14
Ok, så hvis jeg bruger dit forslag med substring og lastindexOf, hvordan skal det så skrives?

Når jeg prøver dette:

var dep = window.location.href;
alert( dep.substring(dep.lastIndexOf("/")+1).split("?")[0] )

- så ser det ud til at den outputter det rigtige nummer. Men hvordan får jeg det kombineret med min if else - altså i stedet for en alert?

Og hvad kan man bruge i stedet for document.write?
Avatar billede Slettet bruger
06. maj 2010 - 21:28 #15
<html>
<head>
function skrivBanner()
  {
  var dep = window.location.href
  deb = dep.substring(dep.lastIndexOf("/")+1).split("?")[0]

  if (dep == "64073")
    {
    var banner = '/files/LB.jpg'
    var url = 'http://www.website3.com'
    }
  else if (deb == "64074")
    {
    var banner = '/files/KB.jpg'
    var url = 'http://www.website4.com'
    }
  else if (deb == "64075")
    {
    var banner = '/files/DSB.jpg'
    var url = 'http://www.website5.com'
    }
  else
    {
    var banner = '/files/default.jpg'
    var url = 'http://www.default.com'
    }

  document.write('<a href='+url+' target=\"_blank\"><img src='+banner+' /></a>')
  }
</head>

<body>
yada yada
<div id="banner"><script>skrivBanner()</script></div>
snik snak
</body>
</html>
Avatar billede Slettet bruger
06. maj 2010 - 21:35 #16
Hov, pas lige på: Jeg skrev både dep og deb
- skulle være det samme overalt
Avatar billede dotcom1 Nybegynder
06. maj 2010 - 21:44 #17
Den er lige i øjet. Det virker perfekt. Tusind tak for det!
Avatar billede olebole Juniormester
06. maj 2010 - 22:02 #18
"Problemet med RegExp er at de er notorisk vanskelige at læse/rette - 2 år efter." >> Sådan har jeg i forskellige perioder haft det med dansk, tysk, fransk, engelsk og RegExp.

I andre perioder har jeg været ret god til dem alle. I dag er jeg i prioriteret rækkefølge bedst til dansk, engelsk, RegExp, tysk, fransk (de to sidste langt dårligere end RegExp).

Pointen er, at RegExp bare er et sprog, som læses ligeså let som alle andre. Det er - ligesom med alle andre sprog - kun et spørgsmål om at lære sig det.

Fordelen ved at bruge RegExp er, at du får lært (eller øver dig i) et ekstremt stærkt værktøj. Ligesom med alle andre sprog øges muligheden for at udnytte sprogets styrke proportionalt med ens kendskab til - og erfaring/øvelse med - sproget.

Just my two cents  =)
Avatar billede olebole Juniormester
06. maj 2010 - 22:16 #19
Mit forslag ville være:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<script type="text/javascript">
var oBanners {
    "64073": ['/files/LB.jpg', 'http://www.website3.com'],
    "64074": ['/files/KB.jpg', 'http://www.website4.com'],
    "64075": ['/files/DSB.jpg', 'http://www.website5.com'],
    "default": ['/files/default.jpg', 'http://www.default.com']
}
function skrivBanner() {
    (/\/([0-9]+)(\?|$)/).test(window.location.href);
    var n = RegExp.$1, oImg = document.getElementById("banner"),
    aBan = oBanners[n] ? oBanners[n] : oBanners["default"];
    oImg.setAttribute("src", aBan[0]);
    oImg.parentNode.setAttribute("href", aBan[1]);
}
window.onload = skrivBanner;
</script>
<body>

<div><a href=""><img id="banner" src=""></a></div>

</body>
</html>
Avatar billede Slettet bruger
06. maj 2010 - 22:22 #20
Det har du selvfølgelig ret i (langt hen ad vejen..).
- Men pas på, måske læser din gamle tysklærer med :|
Avatar billede olebole Juniormester
06. maj 2010 - 22:29 #21
*LoL* tak for tilliden - men de er sgu døde for mange år siden! Jeg er fra 1955  ;D
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