遍历dom元素下面的子元素的方法,vue中原始标签的ref得到是该元素的dom及下面包含的子dom,与组件ref是引用不同

 研究到这个的目的来源是 想用div 遍历方式 替代之前的table tr td 那种框选功能,觉得div灵活,可以随便在外面套层,td与tr之间就不能加div加了布局就乱,然后使用之前的原理(

  const cellList = tableIdR.value.querySelectorAll('td');

  cellList.forEach((cell) => { const initRow = parseInt(cell.getAttribute('initrow'), 10)

),发现这样遍历不好使。然后进一步找ref得到的是啥、dom节点要怎样遍历。

ref放在自定义组件上得到的是组件的引用,
放到原生元素如div 等上面得到的是旗下包含的dom节点

 <div class="squ1"  ref="tableIdR" :id="tableId">
          <el-row class="t1"  v-for="rindex of rowNum" :key="rindex" :id="rindex" :ref="rindex">
              <div v-for="cindex of colNum" :key="cindex" :ref="getCellSeq(rindex,cindex)"
                  :id="getCellSeq(rindex,cindex)"
                  :SampleID="getObjectSampleID(rindex,cindex)"
                  :initRow="rindex"
                  :initCol="cindex"
                 
                  @mousedown="handleMouseDown"
                  @mouseup="handleMouseUp"
                  @contextmenu="openContextMenu($event)"
                  @dblclick = "openEditEnable(rindex,cindex,true)"
                  :style="{width:widthp,height:heightp,fontSize: fontSize}"
                >
              {{ rindex }}{{ cindex }}
              </div>
          </el-row>
      </div>
    </div>



const tableId = 'tableIdR'


// 下面是遍历ref是 ’tableIdR‘的原生dom下的子元素dom,ref放在自定义组件上得到的是组件的引用,
放到原生元素如div 等上面得到的是旗下包含的dom节点,如下面截图
const clearBorderStyles = (tableId) => {
  console.log('vue新方法 tableIdR 打印原生元素的ref内容  ',tableIdR)
  Array.from(tableIdR.children).forEach((child) => {
    console.log('下一级元素: ',child); // 输出每个子元素
    Array.from(child.children).forEach((childSub) => {
      console.log('下二级元素: ',childSub); // 输出每个子元素
    });
  });

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 ,可以使用 `v-for` 指令来遍历数组或对象,并通过 `ref` 函数来获取遍历DOM 元素。具体步骤如下: 1. 在模板使用 `v-for` 指令来遍历数组或对象,并使用 `ref` 函数定义一个引用,例如: ```html <template> <div v-for="(item, index) in items" :key="index" :ref="el => itemsRefs[index] = el"> {{ item }} </div> </template> ``` 在上面的例,我们使用 `v-for` 指令来遍历 `items` 数组,并将遍历的每个元素DOM 引用存储到 `itemsRefs` 数组,以便后续使用。 2. 在组件使用 `reactive` 函数来定义一个响应式对象,例如: ```javascript import { reactive } from 'vue'; export default { setup() { const items = reactive([1, 2, 3]); const itemsRefs = []; return { items, itemsRefs }; } }; ``` 在上面的例,我们使用 `reactive` 函数来定义一个响应式对象 `items`,并定义一个数组 `itemsRefs`,用于存储遍历的每个元素DOM 引用。 3. 在需要获取遍历DOM 元素的地方,可以通过 `itemsRefs` 数组来获取对应的 DOM 元素,例如: ```javascript import { onMounted } from 'vue'; export default { setup(props, { refs }) { const items = reactive([1, 2, 3]); const itemsRefs = []; onMounted(() => { console.log(itemsRefs); // 输出遍历的每个元素DOM 引用 }); return { items, itemsRefs }; } }; ``` 在上面的例,我们在 `onMounted` 钩函数使用 `itemsRefs` 数组来获取遍历的每个元素DOM 引用,并进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值