Сравнение строк jQuery ведет себя по-разному в IE7 - PullRequest
0 голосов
/ 20 сентября 2011

Следующий фрагмент используется в сочетании с элементом автозаполнения пользовательского интерфейса jQuery (#search). В Firefox, Chrome и т. Д. Он ведет себя как ожидалось и всегда возвращает true для выбранного элемента. В Internet Explorer 7 это не .

$('mySelector').filter(function() {
    if ($(this).text().toLowerCase() == $('#search').val().toLowerCase()) {
         return true;
    }
});

За любые подсказки о том, как такое поведение может быть вызвано, я буду очень благодарен!

РЕДАКТИРОВАТЬ: После вставки прекрасной функции анализа Шиме Видасом я снова запускаю вещь, и вот результат сравнения, который должен вернуть true:

image

После еще одного расследования. Кажется, сравнение возвращает истину (слава богу, в противном случае мне понадобилось бы сокращение). Но функция фильтра возвращает любые допустимые объекты. Что и должно, если сравнение верно.

РЕДАКТИРОВАТЬ: Оказывается, я проверял только случаи, когда все было хорошо. Несколько записей имели двойные пробелы между именем и фамилией, что не привело к оценке FALSE в FF и Chrome, но в IE7.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Здесь:

function analyze( str ) {
    var output, i;

    output = 'String: ' + str + ' - Length: ' + str.length + '; ';

    for ( i = 0; i < str.length; i += 1 ) {
        output += str.charCodeAt( i ) + ' ';
    }

    return output;  
}

А потом:

alert( analyze( operand1 ) + '\n\n' + analyze( operand2 ) );

Демо: http://jsfiddle.net/jsZzY/

В окне предупреждения будут показаны все кодовые точки обеих строк ....

1 голос
/ 20 сентября 2011

Может быть, $(this).text() в IE7 возвращает несколько дополнительных символов. Например, дополнительные пробелы, новые строки (\r\n) и т. Д. Попробуйте вывести $(this).text() и $('#search').val() и визуально сравнить эти две строки.

Также вы можете попробовать добавить jQuery.trim функции и т. Д. Если вы избавитесь от всего мусора, ваш код должен работать.

...