有宽度/高度的图像的jQuery DOM元素构建器中的错误?

jQuery 1.4文档描述了如何使用jQuery从提供的HTML字符串和属性集中动态创建DOM元素。 例如:

var d = $('
', {id:'foo', className:'bar'}); d; // => [
] d.attr('id'); // => "foo" d.attr('class'); // => "bar"

这很棒; 但是,对宽度和高度的图像使用此快捷方式时似乎存在错误。 它不是设置属性(如attr()函数所暗示的),而是设置CSS样式:

 var x = $('', {width:10, height:20}); x; // => [​]!!! x.attr('width'); // => 0!!! x.attr('height'); // => 0!!! 

这更令人困惑,因为当从构造函数给出新图像时,jQuery的行为与预期一致:

 var y = $(new Image(10, 20)); y; // => [] y.attr('width'); // => 10 y.attr('height'); // => 20 

这只是jQuery 1.4.2中的一个错误还是出于某种原因预期的行为?

引用jQuery方法

从jQuery 1.4开始 ,第二个参数可以接受一个映射,该映射由可以传递给.attr()方法的属性的超集组成。 此外,可以传入任何事件类型,并且可以调用以下jQuery方法: val,css,html,text,data, widthheight或offset。

因此,这些属性由它们各自的方法处理, .width().height()在style属性中应用它们的值。


以下评论的后续跟进:

至少它是一个文档错误,jQuery不承认合法的heightwidth属性与同名的jQuery方法之间的冲突。

更恰当的是,这是一个需要解决的API错误。 这里提交了一份错误报告。

请注意,这仅在创建元素时影响可选的props参数。 .attr()方法在widthheight方面正常工作。


更新: jQuery已承认冲突,但不会提供任何适合允许其用户在创建元素时在props参数中应用widthheight修复。

因此,这些属性不支持以这种方式进行分配。 您需要在对.attr()的单独函数调用中将这些属性与其余属性分开应用,它确实支持它们。

 var x = $('', { src:'some/path/to.jpg', alt:'some text' }).attr({ width:100, height:100 });