Javascript 如何避免观察者变异中的代码重复
有以下结构(示例本身不起作用,在这里理解结构): 在这个结构中,一些动作是重复的。如何避免JS代码重复?例如,在自调用函数中Javascript 如何避免观察者变异中的代码重复,javascript,Javascript,有以下结构(示例本身不起作用,在这里理解结构): 在这个结构中,一些动作是重复的。如何避免JS代码重复?例如,在自调用函数中 //ObserverAddRule 函数ObserverAddRule(){ const target1=document.querySelector(“#form_edit_rule.sc”) const target2=document.querySelector(“#form_edit_rule.sc1”) 常量配置={ 儿童名单:对 } 常量回调=函数(muta
//ObserverAddRule
函数ObserverAddRule(){
const target1=document.querySelector(“#form_edit_rule.sc”)
const target2=document.querySelector(“#form_edit_rule.sc1”)
常量配置={
儿童名单:对
}
常量回调=函数(mutationsList,observer){
for(让突变列表突变){
if(mutation.type==='childList'){
(功能(){
让scFrstItem=Array.from(document.queryselectoral('.sc.acrList.frstItem.mySelect')).slice(-1)
让scndItem=Array.from(document.queryselectoral('.sc.acrList.scndItem.scnd-title.mySelect')).slice(-1)
设元素=scFrstItem.concat(scnditem)
initChoices(false、、false、false、scElements)
delegateEventChoices()//
})();
(功能(){
让sc1FrstItem=Array.from(document.queryselectoral('.sc1.acrList.frstItem.mySelect')).slice(-1)
让sc1ScndItem=Array.from(document.queryselectoral('.sc1.acrList.scndItem.scnd-title.mySelect')).slice(-1)
设SC1元素=sc1FrstItem.concat(sc1ScndItem)
initChoices(false、、false、false、元素)
delegateEventChoices()//
})();
}
}
}
const observer=新的MutationObserver(回调)
观察者观察(target1,配置)
观察者观察(target2,配置)
}
避免重复的唯一方法是使用参数
自调用函数旨在现场运行,仅一次,不打算重复
因此,如果您有重复的功能,那么可以对可更改的数据使用单独的功能和/或参数
两种可能的解决办法:
const callback=函数(mutationsList,observer){
for(让突变列表突变){
if(mutation.type==='childList'){
(函数(名称空间){
for(让名称空间中的名称空间){
让scFrstItem=Array.from(document.queryselectoral(namespace+'.acrList.frstItem.mySelect')).slice(-1)
让scndItem=Array.from(document.queryselectoral(namespace+'.acrList.scndItem.scnd-title.mySelect')).slice(-1)
设元素=scFrstItem.concat(scnditem)
initChoices(false、、false、false、scElements)
delegateEventChoices()//
}
})(['.sc','.sc1']);
}
}
}
const doSomething=函数(名称空间){
让scFrstItem=Array.from(document.queryselectoral(namespace+'.acrList.frstItem.mySelect')).slice(-1)
让scndItem=Array.from(document.queryselectoral(namespace+'.acrList.scndItem.scnd-title.mySelect')).slice(-1)
设元素=scFrstItem.concat(scnditem)
initChoices(false、、false、false、scElements)
delegateEventChoices()//
};
常量回调=函数(mutationsList,observer){
for(让突变列表突变){
if(mutation.type==='childList'){
剂量测定法('sc');
剂量测定法('.sc1');
}
}
}
如果您需要更具体的答案,请发布更具体的片段。我不知道为什么创建此票证。显然,已经太晚了,我的大脑也累了。今天早上,我试着像往常一样去做,结果成功了,但您有一个非常有趣的实现方法。沙箱:
const callback = function (mutationsList, observer) {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
(function(namespaces){
for(let namespace in namespaces) {
let scFrstItem = Array.from(document.querySelectorAll(namespace + ' .acrList .frstItem .mySelect')).slice(-1)
let scScndItem = Array.from(document.querySelectorAll(namespace + ' .acrList .scndItem.scnd-title .mySelect')).slice(-1)
let scElements = scFrstItem.concat(scScndItem)
initChoices(false, '', false, false, scElements)
delegateEventChoices() // <here you need to pass .sc>
}
})(['.sc', '.sc1']);
}
}
}
const doSomething = function(namespace){
let scFrstItem = Array.from(document.querySelectorAll(namespace + ' .acrList .frstItem .mySelect')).slice(-1)
let scScndItem = Array.from(document.querySelectorAll(namespace + ' .acrList .scndItem.scnd-title .mySelect')).slice(-1)
let scElements = scFrstItem.concat(scScndItem)
initChoices(false, '', false, false, scElements)
delegateEventChoices() // <here you need to pass .sc>
};
const callback = function (mutationsList, observer) {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
doSomething('.sc');
doSomething('.sc1');
}
}
}