2

我的意思是如果我用 jQuery 和 DOM 创建一个元素

var MainHolder = $(document.createElement("div")).addClass("box");

如果我在MainHolder.width()没有在窗口中绘制元素的情况下调用它,它会是切割器并计算出它从.boxCSS 类中获取宽度还是会返回 0,因为它没有被绘制,所以它无法解决?

4

4 回答 4

5

您可以绘制元素,获取宽度并取消绘制它:

var MainHolder = $(document.createElement("div")).addClass("box").css({
    position: "absolute",
    left: -9999
}).appendTo("body");

var width = MainHolder.width();

MainHolder.css({
    position: "static",
    left: "auto"
}).detach();
于 2012-07-17T13:16:21.823 回答
2

使用 jQuery .width(),您只能获取 HTML 文档中元素的宽度。

在下面的示例中,我将 CSS 中的宽度设置为200px

不附加到 HTML 正文的示例 - 返回 0

附加到 HTML 正文时的示例 - 返回 200

我认为主要原因是当您有诸如or之类box的规则时,应用到元素并查找.box规则不起作用。jQuery 需要知道该元素在您的文档中的位置,以了解它的宽度。.container .box.container2 .box

于 2012-07-17T13:15:34.647 回答
0

Jquery 无法获取未绘制元素的宽度。

我之前所做的是将元素的上边距设置为 -1000 并将位置设置为绝对值,获取宽度和高度,然后将上边距设置为正确。

于 2012-07-17T13:15:13.433 回答
0

在我看来,$.hide()这比 CSS 定位要好。根据其他 CSS 样式,带有 的元素left: -9999仍然可见。

$('<div></div>').addClass('box').hide().appendTo('body').width()

jsfiddle

于 2015-01-07T07:39:04.370 回答