Vue 3:如何实现修改 DOM 中所有输入字段的功能?

Posted

技术标签:

【中文标题】Vue 3:如何实现修改 DOM 中所有输入字段的功能?【英文标题】:Vue 3: How to implement a function that modifies all input fields in the DOM? 【发布时间】:2021-08-13 13:44:39 【问题描述】:

我是 Vue 新手,想为所有输入字段添加 onfocus 功能。当我使用 mixin 时,每次挂载组件时都会调用该函数。

createApp(App).mixin(
    mounted() 
        myFunction() 
            document.querySelectorAll('input').doSomething()
        
    
).mount('#app');

这是有道理的,通常也是我想要的,因为新添加的输入字段也应该受到影响。但是,每次挂载组件时,该函数都会遍历整个 DOM,对吧?我想避免对已经具有 onfocus 功能的字段进行不必要的迭代。那么做这样的事情的最佳做法是什么?

【问题讨论】:

【参考方案1】:
import  createApp, h  from "vue";
import App from "./App.vue";
const app = createApp(
  render: () => h(App)
);

app.mixin(
  methods: 
    myFunction() 
      this.$el.querySelectorAll("input").forEach((el) => 
        alert(el.getAttribute("name"));
      );
    
  ,

  mounted() 
    this.myFunction();
  
);

app.mount("#app");

【讨论】:

谢谢!但是使用this.$el.querySelectorAll('input'),我得到 TypeError: this.$el.querySelectorAll is not a function in console ...但它实际上正在工作并输出错误 after my做一点事()。我在这里做错了什么? 它对我来说很完美,也许你做错了什么? codesandbox.io/s/wonderful-cannon-ufy9k?file=/src/main.js 取决于您的模板,this.$el 可能不是指真正的 dom 节点,因此您可能无法在其上调用 querySelectorAll。这主要是由于对多根组件的支持。要正确获取对真实 dom 节点的引用,您应该使用 Template Refs

以上是关于Vue 3:如何实现修改 DOM 中所有输入字段的功能?的主要内容,如果未能解决你的问题,请参考以下文章

Vue中 前端如何动态的修改某个DOM元素鼠标移入移出时的背景图片

如何在 Vue 中使用 nextTick()

Vue的dom更新机制 & Vue的nextTick

vue中ref($refs)用法和作用

Vue 3.0 Beta,重写虚拟DOM,速度显著提升

输入字段中的简单 HTML DOM 解析器