Javascript 从原型中的ajax请求获取高度
如何在原型中获得AjaxResponse的高度。我需要得到从Ajax返回的元素的高度Javascript 从原型中的ajax请求获取高度,javascript,prototypejs,Javascript,Prototypejs,如何在原型中获得AjaxResponse的高度。我需要得到从Ajax返回的元素的高度 new Ajax.Updater('myDiv','myUrl' { parameters: '?something=something', onSuccess: function(transport){ //get height from first div returned }
new Ajax.Updater('myDiv','myUrl' {
parameters: '?something=something',
onSuccess: function(transport){
//get height from first div returned
}
});
您必须将元素插入DOM中,然后测量它。最好的办法是在使用完它后将其插入实际位置(因为您使用的是
Ajax.Updater
)。[如果出于某种原因,您想首先测量它,您可以在它后面附加样式位置:绝对值,并给它一个大的负值左值(例如,左:-10000px
),使它离开页面,然后测量它,然后将它移动到您想要的位置(删除大的左,等等。),但要注意大小的变化,因为样式和其他与其在DOM中的位置相关的因素。]
Prototype调用所有常见的Ajax回调,但请注意,onSuccess
是在执行更新之前调用的。要在之后获得回调,可以使用onComplete
(但请注意,它也会因失败而被调用),或者从onSuccess
中使用setTimeout
给定您的代码和注释“get height from first div returned”,使用onComplete
如下所示:
onComplete: function() {
var firstDiv, height;
firstDiv = $("myDiv").down("div");
if (firstDiv) {
height = firstDiv.getHeight();
// ...
}
}
如果您更喜欢onSuccess
+setTimeout
方法(但请注意,添加元素和测量元素之间的延迟会更长):
据我所知,如果元素不在DOM中,则无法获取其高度,因此需要插入元素,然后测试其高度。高度取决于片段将嵌入的文档,根据全局CSS规则。我最初的回答忽略了一个事实,即在添加元素之前调用onSuccess
(并使用success
而不是onSuccess
;最近jQuery做了太多工作!);我现在已经修好了。我宁愿不要设置超时。它内部工作原理相同,但看起来有点整洁。@clockworkgeek:啊,是的,我忘了这是使用原型的。:-)我也喜欢。谢谢你们的快速回复。正如您所说,我必须将元素插入DOM才能获得高度。@duke:很高兴这有帮助。是的,Ajax.Updater
会将它插入DOM,但它会在onSuccess
之后插入。(BTW,如果这个答案回答了你的问题,考虑接受它;细节:
onSuccess: function() {
setTimeout(function() {
var firstDiv, height;
firstDiv = $("myDiv").down("div");
if (firstDiv) {
height = firstDiv.getHeight();
// ...
}
}, 0); // Won't really be 0ms, but not much longer
}