Javascript jQuery字符串比较在IE7中的行为不同

Javascript jQuery字符串比较在IE7中的行为不同,javascript,jquery,internet-explorer-7,cross-browser,Javascript,Jquery,Internet Explorer 7,Cross Browser,以下代码段与jQuery UI自动完成元素(#search)结合使用。在Firefox、Chrome等中,它的行为符合预期,并且对于所选元素总是返回true在Internet Explorer 7中,它不 $('mySelector').filter(function() { if ($(this).text().toLowerCase() == $('#search').val().toLowerCase()) { return true; } }); 对于

以下代码段与jQuery UI自动完成元素(
#search
)结合使用。在Firefox、Chrome等中,它的行为符合预期,并且对于所选元素总是返回true在Internet Explorer 7中,它不

$('mySelector').filter(function() {
    if ($(this).text().toLowerCase() == $('#search').val().toLowerCase()) {
         return true;
    }
});
对于任何关于这种行为是如何导致的提示,我将非常感激

编辑:在通过Šime Vidas粘贴nice ANALYSE函数后,我再次运行该函数,下面是应该返回true的比较结果:

经过进一步调查。我觉得这个比较结果是正确的(感谢上帝,否则我就需要心理医生了)。但是filter函数返回所有有效的对象。如果比较是真的,那么它应该这样做

编辑:结果表明,我只测试了一切正常的情况。一些条目在名字和姓氏之间有两个空格,这在FF和Chrome中不会导致错误的评估,但在IE7中会导致错误的评估

IE7中的可能
$(this).text()
会返回一些额外的字符。例如,额外的空格、新行(
\r\n
)等。尝试输出
$(this).text()
$(“#搜索”).val()
,并对这两个字符串进行可视化比较

此外,您还可以尝试添加
jQuery.trim
函数等。如果清除所有垃圾,您的代码应该可以工作。

可能
$(此)。IE7中的text()
会返回一些额外的字符。例如,额外的空格、新行(
\r\n
)等。尝试输出
$(this).text()
$(“#搜索”).val()
,并对这两个字符串进行可视化比较

此外,您还可以尝试添加
jQuery.trim
函数等。如果您清除了所有垃圾,您的代码应该可以工作。

这里:

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;  
}
现场演示:

警报框将显示两个字符串的所有代码点……

此处:

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;  
}
现场演示:


警报框将显示两个字符串的所有代码点……

很显然,您需要做的是记录(或警报)
=
操作的两个操作数。然后你就会知道为什么操作在IE7中计算为false。我就是这么做的。将所选元素与列表进行比较时,我没有看到两个字符串之间有任何差异。差异必须隐藏起来。我想发送到控制台,但由于我在IE7中,我显然不能使用firebug,而且我还没有找到一种方法在IE7中轻松登录到控制台。因此,您将这两个字符串放入变量中,对它们都运行
analyze()
,并且在IE7中仍然
str1==str2
计算结果为false?正如我刚刚编辑到我的问题中的那样。这确实是真的。不要。这是必须的。但这不会触发过滤器返回。我不知道这与此问题有关,但通常您希望将
return设置为false(涵盖这两种情况)。如果不这样做,
undefined
将返回,我不确定
filter
在这种情况下是如何工作的。显然,您需要做的是记录(或提醒)
=
操作的两个操作数。然后你就会知道为什么操作在IE7中计算为false。我就是这么做的。将所选元素与列表进行比较时,我没有看到两个字符串之间有任何差异。差异必须隐藏起来。我想发送到控制台,但由于我在IE7中,我显然不能使用firebug,而且我还没有找到一种方法在IE7中轻松登录到控制台。因此,您将这两个字符串放入变量中,对它们都运行
analyze()
,并且在IE7中仍然
str1==str2
计算结果为false?正如我刚刚编辑到我的问题中的那样。这确实是真的。不要。这是必须的。但这不会触发过滤器返回。我不知道这与此问题有关,但通常您希望将
return设置为false(涵盖这两种情况)。如果不这样做,
undefined
将被返回,我不确定
filter
在这种情况下是如何工作的。我已经进行了视觉比较,没有什么不同。事实上,真正的版本还将$.trim()包装在两者周围,这也没有改变任何东西。输出类似于
“**”+value+“**”
的内容,这样您就可以看到值之前/之后是否有空格/CRs/tabs/misc。我已经进行了视觉比较,没有什么不同。事实上,真正的版本也有$.trim()环绕这两个值,这也没有改变任何东西。输出类似于
“**”+value+“**”
的内容,这样你可以看到值之前/之后是否有空格/CRs/tabs/misc。我只是添加了一点改进,这样也可以看到字符串本身。我的原始问题中的疯狂部分。这与讨论中的所有提示(上面)一起,值得接受的答案,即使问题更复杂。我只是添加了一点改进,因此也可以看到字符串本身。我的原始问题中疯狂的部分。这与讨论中的所有提示(上面)一起,值得接受的答案,尽管问题更复杂。