When I do that与任何Chrome或Safari(包括基于WebKit的浏览器),如果我检查与内置工具的元素,它没有style.display财产可言,因此使用的display: block默认div风格。 (Here's a version在div中有一些文字,所以用DOM检查器查看和查找更容易)。
所以我怀疑问题在于别处。例如,是否存在可能在WebKit上失败的干预代码,因此d.show();永远不会被调用?这当然可以解释它。使用Chrome或Safari中的内置工具可以很容易地在创建div的代码上设置断点并遍历它。
回复你的问题:
...我怎么能检查是否元素还未插入到DOM?
这个问题在这里问在计算器上刚刚,而具体到jQuery的其中一个答案是相当优雅:
if (d.closest("body").length == 0) {
// It's not in the DOM yet
}
更新:回复如下
您的评论
用Firefox浏览此测试页。 div有“style = display:block;”明确定义。在Webkit下,它有空的样式属性。我在Firefox和Safari中使用内置的检查器。
啊,没关系,所以这个问题是不是在WebKit浏览器一个display: none(你有关的问题发言使我误入歧途),而火狐(和其他可能的Gecko浏览)最终不得不display: block上元素。
我可能会接近这个是这样的:
var d = $("
d.addClass("hidden");
$("body").prepend(d);
d.removeClass("hidden");
...这个CSS:
.hidden {
display: none;
}
这样,你知道你不会最终得到一个style.display属性。
更新2:你可以做的另一件事是直接删除style.display属性:
var d = $("
d.hide();
$("body").prepend(d);
d.show();
d[0].style.display = "";
你提到的效果,所以如果你在做fadeIn或类似的东西,使用回调:
var d = $("
d.hide();
$("body").prepend(d);
d.fadeIn(function() {
this.style.display = "";
});