Untitled Post - 56
Shadow DOM越来越近了,Chrome 35 已经去掉了Shadow DOM API的供应商前缀。下一个支持Shadow DOM的就是firefox 30了。
Shadow DOM越来越近了,Chrome 35 已经去掉了Shadow DOM API的供应商前缀。下一个支持Shadow DOM的就是firefox 30了。
HTML中property与attribute是极易混淆的两个概念。大多数时候这两个单词都翻译为“属性”,为了区分二者,一般将property翻译为”属性”,attribute翻译为”特性”。
每一个HTML标签(tag)都对应一个DOM接口HTMLXxxElement,比如Span标签对应的是HTMLSpanElement。这些标签的DOM接口都继承自HTMLElement接口,而HTMLElement又继承自Element。我们知道所有的标签都是一个元素结点,因此Element接口又继承自Node接口。其实HTML文档树中的所有东西都是结点,只不过有不同的结点类型而已。
property就是DOM对象的属性,就像普通的javascript对象的属性一样一样的,因为DOM对象就是一个地道的javascript对象,也有自己的原型链。
而attribute则是HTML标签的特性,比如
1 | <div id="div1" title="title1">test<div> |
这里id和title是HTML标签div的特性,虽然对应的DOM对象HTMLDivElement也有这两个属性,但它们却是完全不一样的东西。有些特性与属性是同步的。
HTML标签的attribute以类数组的形式存储在对应DOM对象的属性attributes中,attributes属性的类型为NamedNodeMap对象。
DOM对象提供了方法setAttribute,getAttribute和removeAttribute来操纵HTML标签的特性。
1 | DOMString getAttribute(in DOMString name); |
HTML标签attribute的名字和值都必须为字符串类型,而DOM对象的property没有此限制,可以是任何类型。
有些HTML标签的attribute有对应的DOM对象property,但它们的取值却不一定是相同的。一般来说相对应的attribute与property其名字是一样的,但是class特性有所不同,因为class在javascript中为关键字,所以其所对应的property名字为className。
有些简单的特性,比如id,两者的取值是一样的。
1 | var id1=elem.id; |
但对于input的value,使用getAttribute获取的永远是写HTML标签时指定的那个值,而value属性则获取到的是input当前输入的值。
而另一些特性比如checked,只要checked特性存在,无论其值是什么,DOM对象的checked属性的值都是true。这里checked属性已经不是字符串而是布尔类型了。
还有一些特性比如style和onclick,其对应的DOM属性完全是返回一个对象了,比如elem.style属性就返回一个CSSStyleDeclaration对象。
HTML自定义attribute没有对应的DOM对象property。
References:
[1]attribute和property的区别
[2]JavaScript中的property和attribute的区别
[3]SD9006: IE 混淆了 DOM 对象属性(property)及 HTML 标签属性(attribute),造成了对 setAttribute、getAttribute 的不正确实现
[4]The HTML DOM Element Object
[5]DOM元素的特性(Attribute)和属性(Property)
===
[erq]
jQuery 1.9 删除了一些过时的API,修改了一些API的行为。比如jQuery.browser()已经移除了,推荐使用Modernizr特性检测库,而不是检测特定的浏览器。
从jQuery 2+起,不再支持IE6/7/8。
jQuery提供了迁移插件jquery-migrate来辅助用户平滑升级。
jquery-migrate插件恢复了被删除或变化的API,但会在console给出警告(注意:只有开发版才会给出警告)。
jquery-migrate插件可以用于jQuery 2.x版本,但这只是个过渡,现有产品应该尽快将源代码迁移到jQuery 2.x上来。
这样使用jquery-migrate插件
1 | <script src="js/jquery-2.1.1.js"></script> |
抛弃低版本IE浏览器是大势所趋。IE浏览器从版本11开始才真正算是一个现代浏览器。
也可以使用条件注释语句为低版本IE使用低版本的jQuery。
References:
[1]jQuery Core 1.9 Upgrade Guide
[2]jQuery 1.9升级指南
[3]jQuery 1.9 移除了 $.browser 的替代方法
[4]Conditional comments
===
[erq]
instanceof运算符可以用来判断某个构造函数的prototype属性是否存在于另外一个要检测对象的原型链(__proto__属性指向的隐式原型链,真正的继承链)上。语法形式为:
object instanceof constructor
yoga 13入手快一年半了,都快换新本的节奏了,RTL8723AU wifi驱动终于要进3.15内核了,@瑞昱 @Realtek 你动作真快啊! Realtek RTL8723AU Support Added To Linux 3.15。而且貌似Bluetooth仍然用不了。
使用vim将代码风格(code style)由蛇形(snake_case)改为驼峰(Camel Case):
:%s/_\([a-z]\)/\u\1/g
1、函数对象创建时会继承当前执行环境的作用域链。也就是当前执行环境会将其创建的函数对象的[[scope]]属性设置为当前作用域链的头,也就是指向当前执行环境的活动对象(Active Object),其实就是一个可变对象(Variable Object),不过因为它是当前激活的VO,所以又叫AO。
References:
[1]Javascript 闭包
[2]深入理解javascript之执行上下文(execution context)
[3]JavaScript中的 变量、作用域链、执行上下文
[4]理解js作用域链及闭包
===
[erq]
变量附加到对象上才叫属性,函数附加到对象上才叫方法。属性是可以删除的,而变量不可以。方法也是属性的一种。
1 | $ brew install postgresql |