关于input[text]里的光标定位

Posted by dohkoos on November 30th, 2008 (1,792 views)

当使用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

Posted by dohkoos on February 10th, 2007 (464 views)

原文: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...

Javascript学习笔记之正则表达式

Posted by dohkoos on July 30th, 2005 (403 views)

正则表达式格式:
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值

Related Posts

People who read this, also read...