jQuery和Vue比较:增删css类

之前在wordPress的woocommerce里,对用户的订单页面,新增功能支持用户通过订单直接拉起弹窗评论产品。用了Vue框架改造增强评论弹窗,以便更好支持动态交互体验。

只有在实践过程中,通过对比jQuery和Vue,对相同的功能实现方式,才能更深切的感知两者优缺点,以便更好利用各自的优势实现用户需求。

比如弹窗评论,用户只有在需要时,才点击触发。否则直接隐藏,这需要通过css控制。

<div id="review-modal" class="review-modal dialog-panda-skip hidden">

<!-- 必须写 hidden 类的 CSS -->
.hidden {
  display: none;
}

这就需要js代码控制CSS 类的增减hidden

jQuery 思路

需要先 “选中 DOM 元素”,再手动调用 addClass()/removeClass()/toggleClass() 来操作,逻辑和 DOM 强绑定。

Vue 思路

只关心「数据状态」(比如 isActive、isError、isModalShow),CSS 类的增减由 Vue 自动根据数据同步,不用管 “选哪个 DOM 元素”“怎么操作类”。

使用Vue对原弹窗的 class 进行改造

1:修改弹窗 DOM 的 class 绑定

保留固定类(review-modal dialog-panda-skip),用 :class 动态控制 hidden 类(根据 isModalShow 状态):

<!-- 原代码 -->
<div id="review-modal" class="review-modal dialog-panda-skip hidden">

<!-- 改造后:固定类保留,hidden 类通过 isModalShow 动态控制 -->
<div id="review-modal" 
     class="review-modal dialog-panda-skip" 
     :class="{ hidden: !isModalShow }">

2:在 Vue 实例中添加 isModalShow 状态

在 data 中新增控制弹窗显示的状态变量,初始值为 false(默认隐藏):

new Vue({
  el: '#review-modal',
  data: {
    orderId: '',
    orderNumber: '',
    products: [],
    // 新增:控制弹窗显示/隐藏的状态(默认隐藏)
    isModalShow: false 
  },
  // ...其他方法
});

3:修改打开 / 关闭弹窗的方法

删除原有的 this.$el.classList 操作,改为直接修改 isModalShow 状态:

methods: {
  openModal(orderId, orderNumber, productItems) {
    // 1. 清空并填充数据(原有逻辑不变)
    this.orderId = orderId;
    this.orderNumber = orderNumber;
    this.products = [];
    productItems.forEach(item => {
      this.products.push({
        id: item.dataset.productId,
        name: item.dataset.productName,
        rating: 0,
        content: ''
      });
    });

    // 2. 打开弹窗:只需修改数据状态(核心变化)
    this.isModalShow = true; 
  },
  closeModal() {
    // 关闭弹窗:同样修改数据状态(核心变化)
    this.isModalShow = false;
    // 清空数据(可选,根据需求是否保留上次输入)
    this.products = [];
  }
}

当然,之前的css的hidden 类样式要保留,这样改造后,弹窗显示 / 隐藏只依赖 isModalShow 状态,无需手动操作 DOM,符合 Vue 设计理念。