javascript - 如何运行一个函数来设置特定类型的所有 HTML 标签的高度?
问题描述
我textarea
在很多地方都有一些条件渲染元素,form
根据用户的操作显示/隐藏这些元素。例如:
<li v-if="Form.Type === 1">
<textarea v-model="Form.Title" ref="RefTitle"></textarea>
</li>
可以有任意数量的textarea
元素,如上述。我需要做的是在生命周期中的某些点(例如onMounted
,onUpdated
)调整这些元素的大小。
触发执行此操作的函数是:
setup() {
...
const RefTitle = ref(); // This is the ref element in the template
function autosizeTextarea() {
RefTitle.value.style.height = "35px"; // Default if value is empty
RefTitle.value.style.height = `${RefTitle.value.scrollHeight}px`;
}
...
}
在上面的代码中,我专门针对一个已知textarea
的ref
. RefTitle
我可以使用if(RefTitle.value)
语句来测试它的存在。
但是我怎样才能得到所有textarea
可能被渲染的元素,然后autosizeTextarea
在所有这些元素上运行呢?
我可以得到所有这样的textarea
元素:
setup() {
...
function autosizeTextarea() {
const AllTextareas = document.getElementsByTagName('TEXTAREA');
for (let i=0; i < AllTextareas.length; i++) {
// How can I set the style.height = `${RefTitle.value.scrollHeight}px`;
// in here for each element?
}
}
...
}
但是如何style.height
设置所有这些?
解决方案
您可以创建自己的自定义组件来表示具有组件本身功能的文本区域,因此您不必获取所有动态创建的文本区域。
它可能看起来像这样:
<template>
<textarea :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" ref="textarea" :style="styleObject"></textarea>
</template>
<script>
export default {
emits: {
'update:modelValue': null,
},
props: {
modelValue: {
type: String,
},
// Prop for dynamic styling
defaultHeight: {
type: Number,
required: false,
default: 35,
validator(val) {
// Custom Validator to ensure that there are no crazy values
return val > 10 && val < 100;
}
},
computed: {
styleObject() {
return {
height: this.$refs['textarea'].value.scrollHeight ? `${this.$refs['textarea'].value.scrollHeight}px` : `${this.defaultHeight}px`,
}
},
</script>
这样你甚至可以使用v-model
它。
<li v-if="Form.Type === 1">
<custom-textarea v-model="Form.Title" :defaultHeight="45"></textarea>
</li>
我提供的模板只是为了向您展示自定义组件的外观。您可能必须根据您真正想要更改/触发事物的时间将其融入您的逻辑。
推荐阅读
- c# - 从包含双精度数组的arraylist中删除重复项
- javascript - 使用 setTimeout 实现 setInterval
- php - PHP数组合并
- c# - 如何拆分周期性文本?
- ios - Dynamic Cell Sizing:Overriding Xcode storyboard constraints
- c++ - 如何将不在QT全局范围内的函数附加到Qwidget
- php - 用于转换星级值的PHP代码
- javascript - 谷歌访问令牌每 1 小时到期一次,我怎样才能每次生成新的?
- javascript - 如何停止文本重叠文本区域
- python - 太多的重定向和错误 307 网络抓取