关于input[text]里的光标定位
当使用Tab键切换时,想把光标定位在input的首部。在网上找了一些光标定位的资料发现大多数都是用createTextRange来实现的(而且都出自一个实例)。可在Firefox下createTextRange无效。
在FireFox的developer站点上发现有个setSelectionRange可以实现这样的功能。
使用格式:o.setSelectionRange(start, end);
o:为文本输入框对象
start:为字符串的起始位置
end:为字符串的末位置
但是尝试后发现并不能定位到文本首位,总是全选所有的文本内容,在后面加上获的焦点的命令也不管用。最后还是在国外的一个站点上找到了解决的办法。
下面的代码在Firefox下不能定位到首位,只能选中全部:
function setCaretPosition(aCtrl, aPos) {
if (aCtrl.setSelectionRange) {
aCtrl.setSelectionRange(aPos, aPos);
aCtrl.focus();
} else if (aCtrl.createTextRange) {
var rng = aCtrl.createTextRange();
rng.collapse(true);
rng.moveStart('character', aPos);
rng.moveEnd('character', aPos);
rng.select();
}
}
经过修改后的代码就可以适用于FF,IE,Opera的光标定位了:
function setCaretPosition(aCtrl, aPos) {
if (aCtrl.setSelectionRange) {
setTimeout(function() {
aCtrl.setSelectionRange(aPos, aPos);
aCtrl.focus();
}, 0);
} else if (aCtrl.createTextRange) {
var rng = aCtrl.createTextRange();
rng.collapse(true);
rng.moveStart('character', aPos);
rng.moveEnd('character', aPos);
rng.select();
}
}
Related Posts
JSON in JavaScript
原文:http://www.json.org/js.html
JavaScript是一种被当作页面脚本语言引入Netscape Navigator的通用程序设计语言。它被广泛地认为是Java的一个子集,但实际上它不是(but it is not)。它是一门有着类C语法和soft objects的类Scheme语言,JavaScript在ECMAScript Language Specification, Third Edition中被标准化。
JSON是JavaScript对象描述符号(object literal notation)的一个子集。既然JSON是JavaScript的一个子集,那么在JavaScript中我们可以很容易的使用它(it can be used in the language with no muss or fuss)。
var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};
这个例子中,被创建的对象只包含一个成员"bindings","bindings"是一个包含有3个对象的数组(array),每个对象都有"ircEvent","method"和"regex"3个成员。
这些成员可以用点运算符或下标运算符(subscript operators)得到。
myJSONObject.bindings[0].method // "newURI"
我们可以用eval()函数把JSON文本转换成对象,eval()会调用JavaScript编译器。因为JSON是JavaScript的一个确切的(proper)子集,所以JavaScript编译器可以正确的解析JSON文本,然后生成一个对象结构。
var myObject = eval('(' + myJSONtext + ')');
eval函数的执行是非常快的。然而,它可以编译和执行任何JavaScript程序,因此可能会有安全问题。当来源(source)是可信的时候eval的使用是有必要的(indicated),这种情况通常发生在web服务器同时提供基础页面和JSON数据的web应用程序中。在许多情况下来源是不可信的,特别是永远都不要信任客户端。
如果关心安全的话,那最好是使用JSON解析器。JSON解析器只会认可JSON文本,因此是更安全的。
var myObject = myJSONtext.parseJSON(filter);
可选的filter参数是一个会在最终结果各个层次上的每个key和value上被调用的函数。
所有的value都会被filter函数的返回结果替换,这个(方法)可以用来把普通对象(generic objects)转变为类实例,或者将date字符串转换为Date对象
myDate = text.parseJSOn(function (key, value) {
return key.indexOf('date') >= 0 ? new Date(value) : value;
});
JSON字符串转换器(stringifier)则作相反的工作,它将JavaScript数据结构转换为JSON文本。JSON不支持循环的数据结构,所以注意不要把循环的结构交给JSON字符串转换器。
var myJSONText = myObject.toJSONString();
Related Posts
People who read this, also read...
- 使用USB在ThinkPad X60上安装Ubuntu 8.04
- [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property...
Javascript学习笔记之正则表达式
正则表达式格式:
1、文本格式
/pattern/flags
2、构造函数格式
new RegExp("pattern"[, "flags"])
3、参数
pattern 表示正则表达式的模式
flags 如果指定此项,flags可以是下面值之一
g: global match (全局匹配)
i: ignore case (忽略大小写)
gi: both global match and ignore case (匹配所有可能的值,也忽略大小写)
正则表达式中的特殊字符:
字符\
意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,\不作解释
字符^
意义:表示匹配的字符必须在最左边
字符$
意义:表示匹配的字符必须在最右边
字符*
意义:匹配*前面的字符0次或n次
字符+
意义:匹配+前面的字符1次或n次
字符?
意义:匹配?前面的字符0次或1次
字符.
意义:匹配除换行符外的所有单个的字符
字符(x)
意义:匹配x并记录匹配的值。匹配子串可以通过结果数组中的[1], ..., [n] 获取,或通过RegExp对象的属性$1, ..., $9返回
字符x|y
意义:匹配x或者y
字符{n}
意义:匹配n个前面的字符
字符{n,}
意义:匹配至少n个前面的字符
字符{n, m}
意义:匹配至少n个最多m个前面的字符
字符[xyz]
意义:匹配列出的任一字符。可以用短横线(-)指出一个范围
字符[^xyz]
意义:匹配除了列出的字符外的所有东西。可以使用短横线(-)指出一个范围
字符[\b]
意义:匹配一个空格(不要与\b混淆)
字符\b
意义:匹配一个单词的分界线,比如一个空格(不要与[\b]混淆)
字符\B
意义:匹配一个单词的非分界线
字符\cX
意义:这里的X是一个控制字符。匹配一个字符串的控制字符
字符\d
意义:匹配一个数字,等价于[0-9]
字符\D
意义:匹配任何的非数字,等价于[^0-9]
字符\f
意义:匹配一个表单符
字符\n
意义:匹配一个换行符
字符\r
意义:匹配一个回车符
字符\s
意义:匹配一个空格符,等价于[\f\n\r\t\v]
字符\S
意义:匹配除空格符以外的一个单个的字符,等价于[^\f\n\r\t\v]
字符\t
意义:匹配一个制表符
字符\v
意义:匹配一个顶头制表符
字符\w
意义:匹配所有的数字和字母以及下划线,等价于[A-Za-z0-9_]
字符\W
意义:匹配除数字、字母以及下划线外的其它字符,等价于[^A-Za-z0-9_]
字符\n
意义:这里的n是一个正整数。匹配一个正则表达式的最后一个子串的n的值(计数左圆括号)
字符\ooctal和\xhex
意义:这里的\ooctal是一个八进制的escape值,而\xhex是一个十六进制的escape值

