您可以使用MutationObserver
https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver完成此操作
以下示例将设置一个 vuejs 应用程序,当单击该应用程序时,将类从打开更改为关闭,然后通过 vue 修改类列表。然后它将设置一个突变观察者来查找类属性的更改并运行更多的 jquery 来检查一个makeBold
类是否在类列表中,如果没有则添加它。
这表明 vue 正在控制元素类列表,并且观察者正在通过执行一些 jquery 对更改做出反应
另外我添加了一个复选框来禁用 oberserver 反应,以表明 vue 正在删除 makeBold 类
const app = new Vue({
el: '#app',
data() {
return {
on: true
}
}
})
const node = document.getElementById('app')
// add bold class with jQuery
$('#app').addClass('makeBold')
const observer = new MutationObserver(mutations => {
if ($('#cbx').prop('checked')) return
const changes = mutations
.filter(({ attributeName }) => attributeName === 'class');
if (changes.length && !$('#app').hasClass('makeBold')) {
$('#app').addClass('makeBold')
}
})
observer.observe(node, { attributes: true })
.on {
background-color: orange;
}
.off {
background-color: white;
}
.makeBold {
font-weight: 600;
}
.appBody {
height: 100px;
border: 1px solid #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.11/vue.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="app" class="appBody" :class="{ 'on': on, 'off': !on }" @click="on=!on">
Click Me
</div>
<input type="checkbox" id="cbx"> Disable Observer reaction