2009-11-30 6 views
-1

Je commence à m'habituer à des expressions régulières et je ne suis pas sûr de savoir comment utiliser les variables JavaScript.en utilisant des variables javascript dans des expressions régulières javascript

Mon code est:

Essentiellement, je suis en train
if (window.location.hostname == 'localhost') { 
    var $sURLDomain = 'http://localhost/'; 
} 
else { 
    var $sURLDomain = 'http://mysite.com'; 
} 


$('#content a[href^=$sURLDomain]').addClass('internal'); 

la variable $sURLDomain selon que je suis sur mon url local ou en direct.

Je veux ensuite tester si mes liens commencent par la variable $sURLDomain et utiliser jQuery pour ajouter une classe à ces liens spécifiques seulement.

Cela ne semble pas fonctionner, donc je ne sais pas comment y parvenir.

+3

S'il vous plaît nettoyer votre clavier: le '.' semble être bloqué. –

+0

lol @ Bart pour le sarcasme. – mauris

+0

oi! C'est un bizarre que j'ai quand typin ...... etc.etc – namtax

Répondre

1

Essayez ceci:

$('#content a[href^="'+$sURLDomain+'"]').addClass('internal'); 

Ou:

$('#content a').filter(function() { 
    return this.href && this.href.substr(0, $sURLDomain.length) != $sURLDomain; 
}).addClass('internal'); 
+0

filtre sonne travail supplémentaire pour le moteur JS lors du rendu. – mauris

+0

@thephpdeveloper: Cela dépend de la valeur de '$ sURLDomain' si la méthode' filter' est requise. Mais qu'entendez-vous par rendu? Le moteur JavaScript ne restitue rien dans ce code. – Gumbo

+0

Le premier a fonctionné très bien pour moi ... merci ... Vous vous demandez comment vous identifieriez les liens qui ne commencent pas par la variable sURLDomain ... merci – namtax

1
$('#content a[href^=$sURLDomain]').addClass('internal'); 
  1. JavaScript ne fait pas l'interpolation de chaîne de style PHP. Vous devez dire '#content a[href^='+sURLDomain+']'.

  2. Il est inhabituel de commencer vos variables JavaScript avec un $. Certaines personnes l'utilisent comme une sorte de drapeau de style «notation hongroise» indiquant que la variable est un objet wrapper provenant de jQuery ou d'une autre bibliothèque. On peut se demander si c'est une bonne idée, mais de toute façon ne préfixez pas vos variables avec $ juste parce que c'est ce que PHP fait.

  3. Le sélecteur [^=...] vérifie le début de la valeur d'attribut pour une chaîne littérale. Contrairement au titre de la question, il n'y a pas de regex ici. La seule connexion aux expressions régulières est l'utilisation de ^ pour signifier "le début de la chaîne".

  4. S'il y a un caractère spécial pour les sélecteurs dans l'URL, tel qu'un ] ou \, l'absence d'échappement signifie que l'expression du sélecteur sera rompue. Probablement peu probable dans ce cas particulier, mais il peut être plus simple (et plus facile à changer Déployez donné les noms de domaine) dire:

    for (var i= document.links; i-->0;) 
        if (document.links[i].hostname===location.hostname) 
         $(document.links[i]).addClass('internal'); 
    
+0

Ha! '.hostname' FTW (http://msdn.microsoft.com/fr-fr/library/ms533785(VS.85,loband).aspx) Vous aimez ces propriétés obscures sur' 'les éléments ne sont pas vous. –

Questions connexes