已更新(因为有些人不相信我,哈哈)
因为.append
首先创建节点,然后将其移动到适当的位置。尝试先添加元素,然后添加其属性,如下所示:
$(function() {
$("#test").append(
$("<img />").attr({
src: "http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Bachalpseeflowers.jpg/300px-Bachalpseeflowers.jpg",
onload: "alert(\'hi\')"
})
);
});
我的回答并没有“避免”这个问题,而是非常直接地回答了这个问题。如果您以未压缩格式打开 jQuery.js 文件,您可以清楚地看到它在文档上.append
创建了第一次调用事件时的位置,然后将其放置到再次调用时的位置。也许 shift 是错误的词,请原谅我,因为词汇不是我的强项。但是,如果您遵循代码,您会看到它的创建和移动,但是对于再次使用 append 来移动它并没有说同样的话,因为节点已经创建,它只是从一个元素移动到另一个元素而没有重新加载。正如我所说,不确定最好的术语,但在jQuery.js上很容易理解。node
onload
shifts
不相信我?刚刚在 MSIE9、FF12 和 GoogleChrome20 中测试了以下小提琴,出现了 0 个问题。
仅供参考,这并不是一种可怕的做法,但我看到人们一直在用 jQuery 编写整行 HTML,这违背了目的。这是一个图书馆,有很多书可以故意阅读。有时,完整的 HTML 行可能看起来更容易,但它可能不会更快,因为它没有遵循为您完成的所有出色的布局工作。这个想法是“少写,多做”,这包括 HTML。毕竟,如果您要编写整行 HTML,那么当您可以只用 PHP 编写它时,为什么还要使用 jQuery!?:P 只是一个想法。