Условие JavaScript совпадает, но не возвращается? - PullRequest
0 голосов
/ 02 июля 2010

Пожалуйста, взгляните на следующее:

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");  
    }    
});

По какой-то причине приведенный выше код никогда не становится верным, и я озадачен, почему.Я по отдельности предупредил переменные "part_url" и "full_url", и они оба совпали, так почему оператор if не возвращает true?Я знаю, что это, наверное, что-то глупое, что я пропустил ...

Ответы [ 3 ]

1 голос
/ 02 июля 2010

Вы уверены, что это не возвращает истину?Попробуйте:

alert(full_url == part_url);

Это даст некоторое представление о том, не совпадают ли строки, или же содержимое if просто не имеет эффекта.

Если этовопрос в нижнем / верхнем регистре, тогда для сравнения лучше использовать toLowerCase(), а не регулярные выражения, так как в противном случае вы можете получить ошибки / ложные совпадения (если URL-адреса содержат символы регулярного выражения):

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

Еслиэто не так - попробуйте:

  • проверка длины строк:

    alert(full_url.length); alert(part_url.length);
    
  • с использованием substr на строках для сужениячасть, которая не соответствует:

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

    (возможно, даже использовать цикл для сравнения посимвольных символов - это может быть что-то вроде числа «1» против буквы «l» ...)

0 голосов
/ 02 июля 2010
window.location.host + "/" + window.location.pathname; 

location.pathname включает в себя ведущий /, поэтому вы будете создавать http://www.example.com//domain/shop/cat1 с двумя слешами после имени хоста. Очевидно, что это никогда не будет соответствовать. Уточните свои прищуренные способности, чтобы увидеть, если они такие же!

0 голосов
/ 02 июля 2010

если оператор равенства говорит false, то они не одинаковы, независимо от того, насколько вы в это верите. ;) попробуйте это:

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) + "'");
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...