vue怎么不通过dom操作获取dom节点

今天写一个公众号的项目,写了一个vue的搜索组件,点击搜索框时,背景出现一个遮罩,代码结构如下:

  template:`<div class="searchBar-div">
  <input v-model="keyWord"
    @keyup.enter=‘startSearch()‘
    class="searchBar-input"
    type="search"
    placeholder="搜索"
  />
  <div class="searchBar-mask"
  ></div>
  </div>`,

但是问题出现了,在手机端测试的时候发现,点击遮罩或者点击手机软键盘上的确定都无法使搜索框失焦,遮罩和软键盘都无法消失,只有点击软键盘上的完成或者“▽”符号(打不出那个符号,大家懂就好/捂脸),遮罩和软键盘才能消失。

那么如何使搜索框失焦呢?

当然,如果去操作dom,给遮罩层“searchBar-mask”绑定click事件,点击它的时候,再通过dom操作,使input失焦就解决问题了。

但是,整个项目没有用到jq,也没有用到dom操作,也不想因为这么一个小问题引进jq或者dom操作,只好另辟蹊径。

查资料啊文档啊,最后发现了ref属性还有vue的$emit,ref属性可以使代码可以获取到当前的dom节点,$emit可以是一个发射器,可以向自定义的事件发射信息,就有了一个思路,点击遮罩的时候,向一个自定义的事件发射信息,在搜索框监听这个自定义事件,收到信息后用ref属性获取当前的dom节点,使其失焦,完成!

最后的代码:

var searchBarComponent = {
  template:`<div class="searchBar-div">
  <input v-model="keyWord"
    @keyup.enter=‘startSearch()‘
    v-on:search-blur="this.$refs.input.blur();"
    class="searchBar-input"
    type="search"
    placeholder="搜索"
    ref="input"
  />
  <div class="searchBar-mask"
    @click="searchBlur"
  ></div>
  </div>`,
  data:function(){
    return{
      keyWord:‘‘,
    }
  },
  methods: {
    startSearch: function startSearch() {
      this.$refs.input.blur();
      console.log(‘Do Check‘+this.keyWord);
      this.$emit(‘searcher-key-word‘,this.keyWord);
    },
    searchBlur:function(){
      this.$emit(‘search-blur‘);
    }
  }
}var searchBarComponent = {
  template:`<div class="searchBar-div">
  <input v-model="keyWord"
    @keyup.enter=‘startSearch()‘
    v-on:search-blur="this.$refs.input.blur();"
    class="searchBar-input"
    type="search"
    placeholder="搜索"
    ref="input"
  />
  <div class="searchBar-mask"
    @click="searchBlur"
  ></div>
  </div>`,
  data:function(){
    return{
      keyWord:‘‘,
    }
  },
  methods: {
    startSearch: function startSearch() {
      this.$refs.input.blur();
      console.log(‘Do Check‘+this.keyWord);
      this.$emit(‘searcher-key-word‘,this.keyWord);
    },
    searchBlur:function(){
      this.$emit(‘search-blur‘);
    }
  }
}

template:`<div class="searchBar-div">  <input v-model="keyWord"    @keyup.enter=‘startSearch()‘    v-on:search-blur="this.$refs.input.blur();"    class="searchBar-input"    type="search"    placeholder="搜索"    ref="input"  />  <div class="searchBar-mask"    @click="searchBlur"  ></div>  </div>`,

时间: 2024-10-23 21:03:49

vue怎么不通过dom操作获取dom节点的相关文章

JavaScript Dom操作-增删改节点1

一.Dom操作 文档对象模型DOM:一套定义.规范.准则 为了能够让程序JavaScript去操作页面中的元素节点而定义的一套标准 DOM会把文档看作是一棵树,页面中的每个元素就是树上的一个一个节点:同时DOM定义了很多方法.属性等来操作这棵树中的每一个元素(节点)——每个节点称为DOM节点. 1.  节点.children      ——      (没有兼容性问题:只包含元素节点)   获取第一级子元素 childNodes    获取第一级子元素   有兼容性问题(标准浏览器文本和元素视为

js dom操作获取节点的一些方法

在复习javascript基础的时候,整理了一下js中获取节点的一些常用的方法,见代码: 1 //js获取下一个兄弟节点 2 function getNextSibling(eleObj){ 3 var next = eleObj.nextSibling; 4 if(next.nodeType == 3){ // 文本节点 5 return next.nextSibling; 6 } 7 return next; 8 } 9 //js获取上一个兄弟节点 10 function getPrevio

jQuery DOM操作之删除节点

下面示例可能用到如下HTML代码: <ul>   <li title="t1">苹果</li>   <li>香蕉</li>   <li>橘子</li>   <li>葡萄</li>   <li>草莓</li> </ul> 1.remove()方法: 作用:从DOM中删除所有匹配的元素,传入的参数用于根据jQuery表达式来筛选元素. 例如,删除上

JavaScript Dom操作-增删改节点2 - 实例

html <body> <div id="div1"class="div1 none" style="display: none"></div> <div id="div2" class="div2 none" style="display: none"> <input type="text" name="

jQuery学习笔记DOM操作之包含节点方法

jQuery学习笔记DOM操作之替换节点方法

为什么说DOM操作很慢

原文转自:http://kb.cnblogs.com/page/534571/ 一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为,比如布局(layout)和绘制(paint).下面主要先介绍下这些浏览器行为,阐述一个页面是怎么最终被呈现出来的,另外还会从代码的角度,来说明一些不好的实践以及一些优化方案

为什么DOM操作很慢

转自:http://kb.cnblogs.com/page/534571/ 一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为,比如布局(layout)和绘制(paint).下面主要先介绍下这些浏览器行为,阐述一个页面是怎么最终被呈现出来的,另外还会从代码的角度,来说明一些不好的实践以及一些优化方案.

第3章 jQuery的DOM操作

一.  DOM 分为DOM核心,HTML-DOM和CSS-DOM 1.DOM核心 不专属与javascript. 获取对象:document.getElementsByTagName('div') 获取属性:elem.getAtrribute('title') 2.html-DOM document.div elem.src 3.CSS-DOM elem.style.color='red' 二. jQuery的DOM操作 1.查找节点 (1)元素节点 1 2 alert($('ul li:eq(