字符串比较返回false.使用jQuery mobile的奇怪的javascript行为

Vla*_*ula 4 javascript jquery-mobile

我开始用jQuery mobile创建一个todo列表,以便更好地学习它.我正在听这样菜单按钮发出的事件:

        me.selectedTarget = me.menuNode.find(".ui-btn").first();

        me.menuNode.on("click", ".ui-btn", function (e) {
            var target =  $(e.currentTarget)
                ,targetText = target.text();
            console.debug("Click on'", targetText,"'" );
            if(target === me.selectedTarget) return;

            if(targetText == "View To Do "){
                core.pub("view:todo");
            } else if(targetText == "View Done ") {
                core.pub("view:done");
            } else {
                me.selectedTarget.click();
            }
            me.selectedTarget = target;
        });
Run Code Online (Sandbox Code Playgroud)

由于某种原因,变量targetText在末尾有一个额外的""空格.我有3个按钮,但第三个按钮有点特别 - 无论如何都不相关 - .

此代码侦听的按钮.

我的问题是我总是得到最后一个条款.targetText永远不会等于"View To Do"或"View Done".

为什么不"查看完成"=="查看完成"?〜X(

firebug调试结果

html标记

T.J*_*der 12

比较失败,因为字符串不相同.所以问题确实是为什么它们不一样?显然,其中一个字符串中的空格不是标准空格字符(Unicode有多个空格),或者其中一个字符串中有一个不可见的字符(Unicode也有这些字符).

所以为了找出发生了什么,我会这样做:

var index;
for (index = 0; index < targetText.length; ++index) {
    console.log("char " + index + ": " + targetText.charCodeAt(index));
}
Run Code Online (Sandbox Code Playgroud)

...和您的代码中的字符串文字相同(不是重新输入它,而是将其移动到本地然后输出;因为如果您重新键入它,您可能会键入正常空间).比较字符代码的序列,你会发现差异.

  • 我发现了为什么会这样.jQuery Mobile添加了一个&nbsp; 在创建按钮阴影的span标记中.我的猜测是.text()方法不是从jQ​​ Mobile按钮中获取文本的最佳方法.我认为有一个特殊的功能...或者按钮的标签可能不适合这种用途. (2认同)