jQuery元素构造函数与使用attr不同

时间:2011-03-09 15:29:12

标签: jquery

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

所以,他们在速记和长途之间存在一些差异......!这是一个错误还是故意的?是否还有其他类似行为,我应该注意哪些?

3 个答案:

答案 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)都是如此。如果我正在重述评论中已经涵盖的内容,请道歉。