我想得到一个div的高度,以使另一个div的高度匹配它。我使用了方法clientHeight,但它没有返回我的好值(较小的值)。实际上,它似乎返回一个高度之前,所有的元素都收费。经过一些网上研究,我试图把一个window. load()延迟,直到所有的收费,但它不工作,以及。一些想法?
mounted () {
this.matchHeight()
},
matchHeight () {
let height = document.getElementById('info-box').clientHeight
}
<div class="columns">
<div class="left-column" id="context">
<p>Some text</p>
</div>
<div class="right-column" id="info-box">
<img />
<ul>
some list
</ul>
</div>
</div>
5条答案
按热度按时间jmo0nnb31#
你这样做是好的。但是还有另一种通过
ref
属性的vue特定方法。在这种情况下,由于您只是获取值,因此使用原始的
getElementById
方法还是vue特定的ref
方法并不重要。但是,如果您是在元素上设置值,则最好使用ref
方法,以便vue了解值已更改并且不会"如果需要更新DOM中的节点,则不可能用原始值覆盖该值。You can learn more here: https://v2.vuejs.org/v2/api/#vm-refs
有一些人留言说上面的解决方案不适合他们,这个解决方案提供了概念,但没有完整的代码作为例子,所以我用下面的代码来证明我的答案。
一个一个二个一个一个一个三个一个一个一个一个一个四个一个
下面是浏览器中结果的屏幕截图:
我的答案假设你是从cdn或者本地加载vue.js到浏览器并在那里执行,如果你是通过cli运行你的代码,而我的答案对你不起作用,请看@mayank1513的答案。
6ie5vjzr2#
花了很多时间解决这个问题。最初我试图通过Ron C来获得答案。试图获得
this.$refs.infoBox.clientHeight;
只是没有工作-它给出了未定义。然后我探索了
this.$refs.infoBox
对象。哇!!!我不知道他写的代码对他和其他人来说是如何工作的,但是没有任何属性叫做
clientHeight
。最后在$el
里面找到了它。因此我们需要将
this.$refs.infoBox.clientHeight;
替换为this.$refs.infoBox.$el.clientHeight;
这对我来说很有效。
更新
虽然使用nuxt
this.$refs.infoBox.$el.clientHeight;
不起作用,但Ron C的答案适用于这种情况。this.$refs.infoBox.$el.clientHeight;
似乎在使用@vue/cli
时起作用62lalag43#
我将使用flexbox来实现等高列https://css-tricks.com/snippets/css/a-guide-to-flexbox/
ffscu2ro4#
仅供参考-访问$el时也有问题(未定义)。使用vue/typescript -以下操作正常:
pod7payv5#
在我的案例中,它按照以下路径找到了clientHeight
此.$参考.信息框.$el.下一个元素同级.客户端高度