【问题标题】:Bug in jQuery DOM element builder for Images with width/height?具有宽度/高度的图像的 jQuery DOM 元素构建器中的错误?
【发布时间】:2011-05-17 21:15:55
【问题描述】:

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

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

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

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

这更加令人困惑,因为当从构造函数中给定一个新图像时,jQuery 的行为符合预期:

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

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

【问题讨论】:

  • 离题,但请注意class:'bar' 会在某些浏览器中中断。你应该做'class':'bar'className:'bar'
  • @patrick dw:谢谢,我会编辑我的答案以避免混淆。

标签: jquery


【解决方案1】:

引用jQuery method

从 jQuery 1.4 开始,第二个参数可以接受由 superset 的属性组成的映射,这些属性可以传递给 superset strong>.attr() 方法。此外,可以传入任何事件类型,可以调用以下jQuery方法:val、css、html、text、data、widthheight、或偏移。

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


来自以下 cmets 的跟进:

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

更恰当地说,这是一个需要解决的 API 错误。错误报告has been filed here

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


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

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

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

【讨论】:

  • +1 他们应该添加attr 作为方法之一,这样您就可以使用{attr:{width:10, height:20}} 来解决此类问题。
  • @Gaby:也许我会的。如果这些属性在规范中已被弃用,您是否碰巧知道?
  • @patrick,只是检查一下.. 似乎它们不是(尽管它们只适用于 imgobject 我相信..)
  • @maerics:实际上,.attr() 函数相对于widthheight 可以正常工作。它只是可选的props 参数,用于创建表现不佳的新元素。这将起作用:$('&lt;img/&gt;').attr({width:10, height:20});
  • 盖比:谢谢。 :o) @maerics:我已将这些 cmets 的一些信息添加到此答案中。你可以继续接受这个。 :o)
猜你喜欢
  • 1970-01-01
  • 2016-03-04
  • 2014-08-18
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2020-11-15
相关资源
最近更新 更多