2010-07-02 4 views
0

S'il vous plaît jeter un oeil à l'adresse suivante:JavaScript Condition correspondant, mais ne pas vrai?

jQuery(document).ready(function() { 
    var full_url = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;  
    var part_url = window.location.protocol + "//" + window.location.host + "/domain/shop/";  
    part_url = part_url + "cat1/"; 

    if (full_url == part_url) 
    { 
     jQuery("li.cat1").addClass("current"); 
    }  
}); 

Pour une raison quelconque le code ci-dessus ne devient vrai et je suis perplexe quant pourquoi. J'ai alerté individuellement les variables "part_url" et "full_url" et les deux correspondaient donc pourquoi l'instruction if ne retourne pas vrai? Je sais que c'est probablement quelque chose de stupide que j'ai raté ...

+0

/domain/shop/cat1 == window.location.pathname? (la dernière barre peut être un problème btw) – galambalazs

+0

Vous connaissez la première ligne: 'jQuery (document) .ready (function() {' pourrait être raccourci à '$ (function() {' –

Répondre

1

Etes-vous sûr que ce n'est pas vrai? Essayez:

alert(full_url == part_url); 

qui donnera une indication quant à savoir si les chaînes ne correspondent pas, ou si le contenu du if est tout simplement sans effet.

Si c'est une question de minuscule/majuscule, il est préférable d'utiliser toLowerCase() pour comparer, plutôt que des expressions régulières, sinon vous pouvez obtenir des erreurs/fausses correspondances (si les URL contiennent des caractères regexp):

if (full_url.toLowerCase() == part_url.toLowerCase()) { ... } 

Si c'est pas - essayer:

  • vérifier les longueurs des cordes:

    alert(full_url.length); alert(part_url.length); 
    
  • utilisant substr sur les cordes pour limiter la partie qui ne correspond pas:

    alert(full_url.substr(1,20) == part_url(substr(1,20)); 
    

    (peut-être même utiliser une boucle pour comparer caractère par caractère - il peut être quelque chose comme le numéro « 1 » par rapport à la lettre ' l » ...)

+0

Vous avez 100% raison. Je supprime ma réponse – ChaosPandion

+0

Salut psmears, j'ai fait comme tu as suggéré et j'ai eu des étranges découvertes .. J'ai fait la longueur d'alerte sur les deux variables et elles étaient différentes 56 et 57 MAIS voici le kicker, je rappelle alors les deux variables à l'arrière et la ficelle est identique ... Donc je suis perdu quant à pourquoi la longueur est différente et pourquoi elle n'est pas égale ... J'ai vérifié tous les cas et ils sont tous inférieurs donc ce n'est pas ça..Autres idées? –

+0

@Rick: Essayez la chose 'substr' - il est possible qu'une des chaînes ait obtenu un caractère 'invisible', ce qui apparaîtra, par exemple, si vous alertez avec les 5 premiers caractères (disons): si vous obtenez 'http' : 'et' http 'alors vous saurez que l'on a un contrôle invisible Acter à/près du début. Et, comme quelqu'un d'autre l'a dit, vérifiez le '/' à la fin :) – psmears

0

si l'opérateur d'égalité dit false, alors ils ne sont pas les mêmes, peu importe combien vous croyez. ;) Essayez ceci:

var test = function (s, t) 
{ 
    var sl = s.length; 
    var tl = t.length; 
    var l = sl < tl ? sl : tl; 
    for (var i = 0; i < l && s[i] == t[i]; ++i) /* empty */; 
    if (i < l || sl != tl) { 
     print("common head: '" + s.substr(0, i) + "'"); 
     print("tail s: '" + s.substr(i) + "'"); 
     print("tail t: '" + t.substr(i) + "'"); 
    } 
}; 
0
window.location.host + "/" + window.location.pathname; 

location.pathname comprend le premier /, de sorte que vous allez créer http://www.example.com//domain/shop/cat1 avec deux barres obliques après le nom d'hôte. Clairement, cela ne correspondra jamais. Affinez votre regard strident-à-cordes-à-voir-si-ce-sont les mêmes pouvoirs!

+0

Je l'ai trouvé après avoir posté mon commentaire alors vous avez raison et vous vous trompez aussi!vrai que c'est déjà la barre oblique mais si vous l'alertez, vous remarquerez rapidement qu'il se déshabille pour ne pas montrer // comme vous le pensez ou le devrait ... c'est pourquoi je n'ai pas pu le comprendre en regardant ... –

Questions connexes