0%

只有IE7及以下版本可以识别以非字母字符为前缀的CSS属性,而其它浏览器会忽略。所以有些代码在CSS样式属性名前面添加*号来hack低版本IE。

调用$.ajax函数时,即使设置contentType为’application/json; charset=utf-8’,如果给data属性传递的是一个的对象,这时候jQuery也不会将其自动转换为JSON字符串。jQuery默认会将给data赋予的对象(除字符串之外的任何东西)处理为适用于”application/x-www-form-urlencoded”的请求字符串。

有一个选项processData来控制默认的自动转换,设置其为false,jQuery就不会自动转换对象。

所以如果要向服务器传送JSON字符串就只能自力更生了。如果自己能完全控制.ajax请求就简单了,只要使用JSON.stringify将对象转换为JSON字符串再传递给data就好了。

如果使用第三方库又不想直接修改源代码,可以通过$.ajaxSetup来动态修改传递的数据,看代码:

[javascript]
$.ajaxSetup({
processData:false,
beforeSend: function(jqXHR, settings){
if((settings.contentType.indexOf(‘application/json’) != -1)
&& (typeof settings.data != ‘string’)){
settings.data = JSON.stringify(settings.data);
}
}
});
[/javascript]
不过这是修改jQuery ajax请求的全局配置一定要格外小心,比如processData设置为false后,其他ajax请求也不会自动转换请求数据了。

===
[erq]

以替换google在线字体为国内CDN镜像为例:

1、使用find,sed以及grep

1
$ sed -i 's/fonts.googleapis/fonts.useso/g' `find . | xargs grep -rl 'fonts.googleapis'`

2、使用find和perl

1
$ find . | xargs perl -pi -e 's/fonts.googleapis/fonts.useso/g'

或者

1
$ perl -pi -e 's/fonts.googleapis/fonts.useso/g' `find .`

3、不使用find也行

1
$ grep -rl oldString path | xargs sed -i 's/oldString/newString/g'

或者

1
$ sed -i 's/oldString/newString/g' `grep -rl oldString path`

当为设置块元素的height属性(attribute)为百分比数值时,其父元素必须显式的设置了height属性,否则子元素的height属性不起作用。

[是一个shell内建命令函数,而不是一个关键字。也就是说[是一个函数,其最后一个参数为],[的参数之间必须严格的使用空白分隔。if [ “$str” == “a” ]; then实际上是调用[函数,其参数分别为”$str”,==,”a”和],这与if test “$str”==”a”; then是等价的,test函数对空白没有特殊要求。[与test是基本等价的。而[[则是shell关键字,有更多的扩展特性,比如支持规则表达式匹配运算符。逻辑运算时,[使用-a和-o,而[[使用&&和。

label元素平淡无奇,就是为表单输入元素贴上标签,方便辨识。label有个很重要的属性是for,可以将label与其标识的输入元素绑定在一起,提供更好的操作体验。

显式label

[html]

[/html]

重置和提交按钮,图片按钮以及button元素按钮不用使用显式label,因为它们已经有了隐式标签,如value 和 alt 属性值,button元素的内容。

显式的label对Accessibility是最友好的。

隐式label
将输入元素直接包裹在label标签之内,for属性也可以省略了,甚至输入元素的id也可以省略了。
[html]

[/html]
IE6不支持隐式label

混合式label
即使用label的for特性,又将输入元素包裹在label之内
[html]

[/html]

References:
[1]表单显式LABEL和隐式LABEL对屏幕阅读器用户的影响–更新
[2]HTML 标签的 for 属性

===
[erq]

HTML元素的id属性在一个文档中应该是独一无二的,传统上我们也是这样做的。但是开发SPA单页(Single Page Application)webapp时很容易遇到ID会重复的情况。当SPA多次动态加载同一个模块时,id重复是在所难免了。当前的项目就遇到了这个问题。

ID重复也不是什么大问题,但从语义来讲id(identification)应该是全局唯一的。xml文档严格要求id不能重复,如果html文档中元素有重复的id就无法通过XML校验,不是一个合法的XML文档。id重复虽然现在没有问题,但浏览器并没有保证以后不会出现问题。

当然可以通过动态修改HTML元素的id特性来缓解这个问题。

id重复的元素,通过jQuery或者原生的querySelectorAll方法都可以全部获取到。而且还可以通过指定一个明确的context来选择特定的id。虽然有其他相同id的元素,但只要他们有不同的context,就可以在选择器层面上进行明确的区分。

无论HTML元素的ID如何重复,浏览器生成的DOM对象都是实实在在的不同的。所以ID重复也不是什么大问题,如果实在无法避免重复,那就当class一样来用好了。

但要注意,HTML元素ID重复可能会break一些库或者框架。

References:
[1]HTML id Attribute
[2]HTML中的重复ID问题

===
[erq]