jQuery 1.4添加了a shorthand way for constructing new DOM Elements并填写了一些属性:
jQuery( html, props )
html
:定义单个独立HTML元素的字符串(例如或)。
props
:调用新创建元素的属性,事件和方法的映射。
但是,我刚刚注意到这种奇怪(使用jQuery 1.5.1):
>>> $("<img />", { height: 4 })[0].height
0
>>> $("<img />").attr({ height: 4 })[0].height
4
所以,他们在速记和长途之间存在一些差异......!这是一个错误还是故意的?是否还有其他类似行为,我应该注意哪些?
答案 0 :(得分:3)
来自docs:
从jQuery 1.4开始,第二个参数 可以接受由a组成的地图 属性的超集可以 传递给
.attr()
方法。 此外,任何事件类型都可以 传入,以及以下jQuery 可以调用方法:val,css,html, 文本,数据,宽度,高度或偏移量。
所以基本上,代码段不等同于$("<img />").attr({ height: 4 })
,而是等同于$("<img />").height(4)
,而它评估的html是<img style="height: 4px" />
- 因此返回0
。
答案 1 :(得分:0)
简短的方法应该是:
$("<img />", { height: 4 }).height();
答案 2 :(得分:0)
不同的是设置attr会添加一个height属性,其他表单设置高度样式属性。因此,速记版本设置样式而不是height
属性:
$("<img />", { height: 4 });
// creates <img style="height:4px;">
$("<img />").height(4);
// creates <img style="height:4px;">
$("<img />").attr({height: 4});
// creates <img height="4">
无论是否将元素附加到DOM(使用jquery 1.4.4和1.5.1)都是如此。如果我正在重述评论中已经涵盖的内容,请道歉。