2013-06-27 2 views
0

У меня есть следующий код JavaScript:Matching спасся пространства с помощью JavaScript IndexOf

var matchArray = []; 
var passedUrl = '/' + url; 
var tabLink; 

$('.uiAjaxTabs li a').each(function() { 
    if (passedUrl.indexOf($(this).attr('href')) == 0) { 
     boverlap_penalty = passedUrl.replace($(this).attr('href'), '').length; 
     matchArray.push({ 'score': boverlap_penalty, 'dom_obj': this }); 
    } 
}); 

if (matchArray.length) { 
    tabLink = matchArray.sort(function (a, b) { 
     return (a.score < b.score) ? -1 : 1 
    }).shift().dom_obj; 
} 

$(tabLink).parents('li').addClass('loading'); 

Который берет passedUrl и затем сопоставляет его с набором ссылок, чтобы увидеть, который наиболее точно соответствует URL, а затем добавляет класс загрузки к нему.

Это работает отлично ИСКЛЮЧАЕТЕ, если ссылка имеет пробел в ней, например. domain.com/People?Name=John Doe, потому что браузер видит его как domain.com/People?Name=John%20Doe и, следовательно, не соответствует ему правильно, когда у переданногоUrl есть экранированные пробелы, а ссылка отсутствует.

Любые идеи о том, как исправить это?

+1

URL-адреса не могут иметь пробелы. – SLaks

+0

Просьба предоставить тестовый файл с некоторыми значениями для '$ (this) .attr ('href')', 'url', который вы используете, и ожидаемого результата. – Bergi

ответ

1

Любые идеи о том, как исправить это?

Использование

var passedUrl = decodeURI('/' + url); 

См MDN docs.

0

Попробуйте функцию JavaScript unescape, она, кажется, расшифровывает строки, закодированные в URL.

+0

Проверьте [decodeURIComponent vs unescape, что случилось с unescape?] (Http://stackoverflow.com/q/619323/1048572) – Bergi