vue頁(yè)面中使用getElementsByClassName無(wú)法獲取元素的解決
一、問(wèn)題描述
在vue頁(yè)面中,使用getElementsByClassName獲取dom,發(fā)覺(jué)總是獲取不到,返回的數(shù)組,空空如也,長(zhǎng)度為0。
二、問(wèn)題分析
據(jù)說(shuō)這是由于vue的機(jī)制造成的。 需要等所有內(nèi)容都掛載完畢才行。
具體內(nèi)容可見(jiàn)參看這篇文章。要使用nextTick。
我印象中,nextTick好像總是與onMounted一起使用。但其實(shí)不是。
以下例子中,nextTick就沒(méi)有跟onMounted放在一起,而是位于外部調(diào)用的開(kāi)關(guān)方法,跟隨事件而觸發(fā)。
三、問(wèn)題解決
以下代碼,是一個(gè)組件,響應(yīng)外部調(diào)用傳過(guò)來(lái)的參數(shù),展示或隱藏不同的內(nèi)容,并且執(zhí)行初始化動(dòng)作。
初始化時(shí),需要使用getElementsByClassName獲取dom。
初始化方法需要放在nextTick()里執(zhí)行,才能獲取指定class的dom。
<template> <div id="tjContainer"> <div v-if="state.water" class="tj-container">內(nèi)容一</div> <div v-if="state.zone" class="tj-container">內(nèi)容二</div> <div v-if="state.red" class="tj-container">內(nèi)容三</div> </div> </template>
<script setup> const state = reactive({ targ: "", water: false, zone: false, red: false, }); const showOrHide = (targ, status) => { state.targ = targ; const t = targ.toLowerCase(); if (t === "water") state.water = status; else if (t === "zone") state.zone = status; else if (t === "red") state.red = status; nextTick(() => {//nextTick,不一定要用在onMounted里 dragInit(); }); }; const show = (targ) => { showOrHide(targ, true); }; const hide = (targ) => { showOrHide(targ, false); }; defineExpose({ show, hide });//外部可以調(diào)用這兩個(gè)方法 function dragInit() { const dom = document.getElementById("tjContainer"); const els = dom.getElementsByClassName("tj-container"); if (els.length === 0) { console.log("找不到class='tj-container'的元素"); return; } const drag = els[0]; //大展宏圖,吧啦吧啦吧啦 } </script>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue項(xiàng)目設(shè)置可以局域網(wǎng)訪問(wèn)
這篇文章主要介紹了Vue項(xiàng)目設(shè)置可以局域網(wǎng)訪問(wèn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10VUE實(shí)現(xiàn)自動(dòng)滾動(dòng)簡(jiǎn)單示例
這篇文章主要給大家介紹了關(guān)于VUE實(shí)現(xiàn)自動(dòng)滾動(dòng)的相關(guān)資料,現(xiàn)在很多數(shù)據(jù)展示大屏都會(huì)有很多的自動(dòng)滾動(dòng)的列表,文中通過(guò)代碼實(shí)例介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08vue安裝less-loader依賴失敗問(wèn)題及解決方案
這篇文章主要介紹了vue安裝less-loader依賴失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue引用vee-validate插件表單驗(yàn)證問(wèn)題(cdn方式引用)
這篇文章主要介紹了Vue引用vee-validate插件表單驗(yàn)證問(wèn)題(cdn方式引用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12詳解Vue項(xiàng)目中出現(xiàn)Loading chunk {n} failed問(wèn)題的解決方法
這篇文章主要介紹了詳解Vue項(xiàng)目中出現(xiàn)Loading chunk {n} failed問(wèn)題的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Vue element-UI el-select循環(huán)選中的問(wèn)題
這篇文章主要介紹了Vue element-UI el-select循環(huán)選中的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Vue3?跨域配置devServer的參數(shù)和設(shè)置方法
這篇文章主要介紹了Vue3?跨域配置devServer的參數(shù)和設(shè)置,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Vue3實(shí)現(xiàn)下拉選擇框多選功能的方法詳解
在vue的實(shí)際開(kāi)發(fā)過(guò)程中,我們?nèi)绾螌⒁赃x中的值直接渲染到頁(yè)面中,下面這篇文章主要給大家介紹了關(guān)于Vue3實(shí)現(xiàn)下拉選擇框多選功能的相關(guān)資料,需要的朋友可以參考下2023-09-09Vue 使用計(jì)時(shí)器實(shí)現(xiàn)跑馬燈效果的實(shí)例代碼
這篇文章主要介紹了Vue 使用計(jì)時(shí)器實(shí)現(xiàn)跑馬燈效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07