当一位同事向我展示了这一行的JavaScript警报时,我感到莫名其妙。
alert(2+ 40);
运行代码片段Hide results展开代码段
很快就会发现,看起来像一个负号的实际上是一个具有明显不同语义的神秘Unicode字符。
这让我想知道为什么这个字符在解析表达式时不会产生语法错误?
jason的代码不能用于iframe中的元素(因为范围不同于窗口和文档)。我修正了这个问题,并修改了它,以便用作其他jQuery插件(可链接):
示例1:通过单击选择<code>标签内的所有文本,并添加“selected”类:
$(function() {
$("code").click(function() {
$(this).selText().addClass("selected");
});
});
例2:点击按钮,在Iframe中选择一个元素:
$(function() {
$("button").click(function() {
$("iframe").contents().find("#selectme").selText();
});
});
注意:请记住,iframe源应该驻留在同一个域中以防止安全错误。
jQuery插件:
jQuery.fn.selText = function() {
var obj = this[0];
if ($.browser.msie) {
var range = obj.offsetParent.createTextRange();
range.moveToElementText(obj);
range.select();
} else if ($.browser.mozilla || $.browser.opera) {
var selection = obj.ownerDocument.defaultView.getSelection();
var range = obj.ownerDocument.createRange();
range.selectNodeContents(obj);
selection.removeAllRanges();
selection.addRange(range);
} else if ($.browser.safari) {
var selection = obj.ownerDocument.defaultView.getSelection();
selection.setBaseAndExtent(obj, 0, obj, 1);
}
return this;
}
我测试了IE8,Firefox,Opera,Safari,Chrome(当前版本)。我不确定它是否适用于较旧的IE版本(真诚我不在乎)。
该字符是“OGHAM SPACE MARK”,这是一个空格字符。所以代码相当于alert(2+ 40)。
我也想知道是否有更多的人物像这样的行为。
Zs类中的任何Unicode字符都是JavaScript中的空格字符,但似乎没有那么多。
但是,JavaScript也允许在标识符中使用Unicode字符,这使您可以使用有趣的变量名称ಠ_ಠ。