geef class aan current url

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Reshad F

Reshad F

01/03/2012 01:04:53
Quote Anchor link
olaa dames en heren,

ik probeer dmv jQuery scriptje een class toewijzen aan de url die nu actief is..

dus als ik op index.php sta dat die index.php de class current krijg..

ik heb dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
  $(function(){

    var url = window.location.pathname
        urlRegExp = new RegExp(url.replace(/\/$/,''));
    
        $('.invertedshiftdown a').each(function(){
            
            if(urlRegExp.test(this.href)){
                $(this).addClass('current');
            }
        });
});


maar het werkt niet,,, komt dit omdat ik op localhost werk?

ik krijg overigens in mijn console ( van chrome ) de volgende foutmelding:"Uncaught SyntaxError: Unexpected token ILLEGAL"

dus dat die laatste haakjes fout zijn... kijk ik ergens overheen?
 
PHP hulp

PHP hulp

28/11/2024 18:08:14
 
Wouter J

Wouter J

01/03/2012 11:30:33
Quote Anchor link
Quote:
komt dit omdat ik op localhost werk?

Nee, JavaScript is client-side. De code wordt dus pas uitgevoerd in de browser, dus als er iets mis is gaat het fout in het browser. Maar aangezien jquery claimt IE6 en hoger aan te kunnen kan dat het niet zijn.

Je gebruikt alleen het RegExp object verkeerd. Die /\/$/ is een RegExp object. Je moet dus op regel 4 of dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
regStr = new RegExp('\/$');
urlRegExp = url.replace(regStr, '');

// of dit:
urlRegExp = url.replace(/\/$/, '');


Verder is dit sneller dan het geen je nu op regel 8 hebt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$('.invertedshiftdown').children('a').each(function() { ... });


En regel 8 is dan weer verkeerd. Je moet daarin hetzelfde toepassen als hierboven, dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
regStr = new RegExp('\/$');
urlRegExp = url.replace(regStr, '');

$('.invertedshiftdown').children('a').each(function() {

  if( regStr.test($(this).attr('href')) ) { // zie de jQuery versie van this.href
    $(this).addClass('current');
  }
});

Of je zult in dit script de eerste regel moeten verwijderen en regStr veranderen in /\/$/

Wel een beetje moeilijk verhaal geworden voor een jQuery beginner denk ik, even wat links ter ondersteuning:
- http://api.jquery.com/attr (voor het correct selecteren van het href attribuut)
- http://api.jquery.com/children
- https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp (voor de regexen in JS)
Gewijzigd op 01/03/2012 11:36:51 door Wouter J
 
Erwin H

Erwin H

01/03/2012 12:08:34
Quote Anchor link
En waarom probeer je dit client side op te lossen en niet al serverside? Als je het menu opbouwt kun je toch gewoon die class meegeven?
Of, geef in een hidden input de naam of id op van de pagina zodat je het heel eenvoudig direct kunt doen met JQuery.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<input type="hidden" id="curr_page" value="#home">
<script>
$(document).ready(function(){
  $($('#curr_page').val()).addClass('current');
});
</script>

Het laatste stukje JQuery heb ik even niet getest, maar zou volgens mij moeten werken.
 
Reshad F

Reshad F

01/03/2012 13:51:16
Quote Anchor link
En hoe zou ik het serverside op moeten lossen dan?
 
Erwin H

Erwin H

01/03/2012 14:20:35
Quote Anchor link
Als je het menu opbouwt kan je op de een of andere manier checken welke pagina je aan het laden bent en dan een extra class geven aan je link. Specifieker kan ik nu niet zijn, want ik ken je code niet...
 
Roel -

Roel -

01/03/2012 15:47:40
Quote Anchor link
Waarom doe je dit eigenlijk met JavaScript en niet gewoon met PHP?
 
Reshad F

Reshad F

03/03/2012 19:21:38
Quote Anchor link
ik heb het zo opgebouwd @erwin http://plaatscode.be/141675/
@roel hoe zou ik het met php doen dan?
@wouterJ jou manier geprobeerd werkt niet.. ik heb die manier wat ik zelf gepost had op fiddle geprobeert en dat werkte wel

wat ook kan is handmatig zoals ik het nu heb de betreffende li item de class current meegeven maar is dat netjes en een goede manier?

de manier waarop ik nu de website heb wil ik overigens wel aanpassen qua manier van pagina ophalen ( met een switch o.i.d get(page))
 
Roel -

Roel -

04/03/2012 01:20:38
Quote Anchor link
Ik neem aan dat dit een menu is die je include op iedere pagina. Het enige wat je dan hoeft te doen is voor je include van je menu een variabel mee te geven met daarin de naam van die pagina en dan per menu item te controleren of het die waarde is.
 
Reshad F

Reshad F

04/03/2012 02:15:31
Quote Anchor link
Ik heb niet met includes gedaan, alles gewoon statisch erin gezet nu voor even maar dat moet ik nog mamak zie mijn vorige post :) en kijk maar in mijn code hoe het er nu uitziet heb even de index.php gelinkt
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.