【发布时间】:2011-10-26 16:52:48
【问题描述】:
我正在使用 NetBeans IDE 7.0.1 开发 Web 应用程序的前端。最近我遇到了一个非常讨厌的错误,我终于修复了。
说我有代码
var element = '<input size="3" id="foo" name="elements[foo][0]" />';
$('#bar').append(element);
当我看到 size 属性在 Chrome 中不起作用时(未在其他浏览器中检查),我注意到出了点问题。当我在 Inspector 中打开该元素时,它被解释为类似
<input id=""3"" name=""elements[foo][0]""
size=""foo"" />
这很奇怪。手动重新键入element 字符串字符后,该错误消失了。当我撤消该更改时,我注意到 Netbeans 提醒我有关旧代码中的一些 Unicode 字符。它是 \u200b - 每个 '=' 之后、'][' 和字符串末尾之间的零宽度空格。所以字符串看起来很正常,因为没有显示零宽度空格,但是在转义它们之后我的字符串是
'<input size=\u200b"3" id=\u200b"foo" name=\u200b"elements[foo]\u200b[0]" />\u200b'
现在我到底是从哪里弄来的?
我不确定我从哪里复制了element 的代码,但它肯定是以下之一:
- 带有 HTML 模板文件的 Netbeans 编辑器的其他窗格;
- Google Chrome 检查器,“复制为 HTML”操作;
- Google Chrome 源代码查看页面(非常可疑)。
但我无法重现错误。
我在 Windows 7 下使用 Netbeans 7.0.1 和 Google Chrome 13.0。没有键盘切换器或类似的东西在运行。此外,我使用 Git 进行版本控制,但我没有提取该代码,因此 Git 不太可能受到责备。这不能是我同事的愚蠢笑话,因为他们很有礼貌。
有什么建议弄乱了我的代码?
【问题讨论】:
-
可怕。我希望你能找到它。
-
谢谢,@RichieHindle。我放弃了自己追踪它,希望社区能提供帮助。毕竟在我知道如何修复它之后它并不那么可怕(扫描“\u200b”外观的来源)。但我很好奇这是从哪里来的。
-
@Hnatt: 你的第二行代码是调用 jQuery 吗?如果是,您能否在进一步使用之前尝试使用 escape() 和/或 encode() 来“警告” var 元素的内容;你能尝试绕过 jQuery 重新编码你的追加(使用 getElementsByTagName()、append())来明确地将 jQuery 伪造为万恶之源吗?
-
@Hnatt/2: 如果是 jQuery,你会建议版本....也许有人试图重现这个使用不同的版本
-
@MikeD 它是 jQuery 1.4.2,但它与错误无关,因为那些零长度空格是粘贴在 我的代码中,而不是由脚本生成的。我想弄清楚的是我是如何设法将它复制到那里的。
标签: javascript html google-chrome netbeans unicode