【Vue & JavaScript & Css】Multiple class name duplication problem(js/jq原生导致多个类名重复问题)

简介: 【Vue & JavaScript & Css】Multiple class name duplication problem(js/jq原生导致多个类名重复问题)

组件 s-select

<template>
  <div class="custom-dropdown">
    <button class="dropdown-toggle">选择一个选项 <i class="up-icon"></i></button>
    <ul class="dropdown-menu">
      <li>选项</li>
    </ul>
  </div>
</template>
<script>
import './index.css';
import { showSelectItem } from './dom.js';
export default {
  name: 's-select',
  mounted() {
    showSelectItem();
  },
};
</script>

dom.js

export const showSelectItem = () => {
  let selectState = false;
  $('.dropdown-toggle').on('click', function() {
    $('.dropdown-menu')[0].style.display = selectState ? 'none' : 'block';
    selectState = !selectState;
  });
};

功能是 点击button,会下拉出一个 select-item 下拉框,结果运行时,有多个 <s-select></s-select>, 所以就会有很多 className 重复,导致成为一次性组件

进行修改

使用 Vue 事件绑定操作组件的 ref 属性中的 style

使用ref属性可以为DOM元素或组件指定一个唯一的引用标识符

修改后的代码

<template>
  <div class="custom-dropdown">
    <button class="dropdown-toggle" @click="toggleDropdown">
      选择一个选项 <i class="up-icon"></i>
    </button>
    <ul class="dropdown-menu" ref="dropdownMenu">
      <li>选项</li>
    </ul>
  </div>
</template>
<script>
import './index.css';
export default {
  name: 's-select',
  mounted() {
    this.showSelectItem();
  },
  methods: {
    toggleDropdown() {
      this.$refs.dropdownMenu.style.display = this.$refs.dropdownMenu.style.display === 'none' ? 'block' : 'none';
    },
    showSelectItem() {
      this.$refs.dropdownMenu.style.display = 'none';
    }
  }
};
</script>

Vue与原生JavaScript之间存在一些差异,虽然在某些情况下仍然可以使用原生JavaScript进行DOM操作,并不是极力不推荐

如果想在 Vue 中实现以上类似的功能,可在 className 中使用 hash code…

相关文章
|
11天前
|
前端开发 JavaScript
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
|
12天前
|
JavaScript 前端开发 容器
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
15 2
|
13天前
|
JavaScript 前端开发
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
12 1
|
12天前
|
前端开发 JavaScript
vue实战范例——箭头步骤条/导航(含css 斜切skew的妙用)
vue实战范例——箭头步骤条/导航(含css 斜切skew的妙用)
24 0
|
13天前
|
前端开发 JavaScript
【HTML+CSS+JavaScript】3d-boxes-background
【HTML+CSS+JavaScript】3d-boxes-background
7 0
|
JavaScript 前端开发
javascript中通过className灵活查找元素 例如我们要把根据class来进行修改样式
原文:javascript中通过className灵活查找元素 例如我们要把根据class来进行修改样式 一、背景:一个表单中,要修改一些li中有class=box的样式,将它的background设置为red红色。
1195 0
|
6天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
19 2
|
6天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
14 4
|
6天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
17 4
|
6天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
22 4