在JavaScript中操作DOM时如何避免可变性?

在JavaScript中操作DOM时如何避免可变性?,javascript,dom,mouseover,mouseout,srcset,Javascript,Dom,Mouseover,Mouseout,Srcset,我正在创建一个函数,它在图像中循环并应用滚动功能 代码如下: var on=function(事件、元素、回调、捕获){ log('onFunction'中的elem',elem) console.log('onFunction中的elem',elem的类型) if(元素类型==“函数”){ 捕获=回调; 回调=元素; 元素=窗口; } 捕获=!!捕获; elem=typeof elem==“字符串”?文档。查询选择器(elem):elem; 如果(!elem)返回; 元素addEventLi

我正在创建一个函数,它在图像中循环并应用滚动功能

代码如下:

var on=function(事件、元素、回调、捕获){
log('onFunction'中的elem',elem)
console.log('onFunction中的elem',elem的类型)
if(元素类型==“函数”){
捕获=回调;
回调=元素;
元素=窗口;
}
捕获=!!捕获;
elem=typeof elem==“字符串”?文档。查询选择器(elem):elem;
如果(!elem)返回;
元素addEventListener(事件、回调、捕获);
};
功能翻转(elem、src){
console.log('rollOver src',src);
document.getElementById(elem).srcset=src;
}
功能卷展栏(元素,src){
console.log('rollOut src',src);
document.getElementById(elem).srcset=src;
}
if(!String.prototype.splice){
/**
*{JSDoc}
*
*splice()方法通过删除字符串的一个范围来更改字符串的内容
*字符和/或添加新字符。
*
*@this{String}
*@param{number}开始索引,从该索引开始更改字符串。
*@param{number}delCount一个整数,指示要删除的旧字符数。
*@param{string}newSubStr插入的字符串。
*@return{string}具有拼接子字符串的新字符串。
*/
String.prototype.splice=函数(start、delCount、newSubStr){
返回this.slice(0,start)+newSubStr+this.slice(start+Math.abs(delCount));
};
}
document.addEventListener(“DOMContentLoaded”),函数(事件){
var rollOverCollectionA=文档
.getElementById(“roll-over-collection-b”)
.getElementsByClassName(“滚动”);
rollOverCollectionA=Array.prototype.slice.apply(rollOverCollectionA);
日志(“rollOverCollectionA”,rollOverCollectionA);
var l=滚动收集A.length;
for(设i=0;i

现在购物

下面使用“替换”来移除
-hover
hover-
中的拼接

var on=function(事件、元素、回调、捕获){
log('onFunction'中的elem',elem)
console.log('onFunction中的elem',elem的类型)
if(元素类型==“函数”){
捕获=回调;
回调=元素;
元素=窗口;
}
捕获=!!捕获;
elem=typeof elem==“字符串”?文档。查询选择器(elem):elem;
如果(!elem)返回;
元素addEventListener(事件、回调、捕获);
};
功能翻转(elem、src){
console.log('rollOver src',src);
document.getElementById(elem).srcset=src;
}
功能卷展栏(元素,src){
console.log('rollOut src',src);
document.getElementById(elem).srcset=src;
}
if(!String.prototype.splice){
/**
*{JSDoc}
*
*splice()方法通过删除字符串的一个范围来更改字符串的内容
*字符和/或添加新字符。
*
*@this{String}
*@param{number}开始索引,从该索引开始更改字符串。
*@param{number}delCount一个整数,指示要删除的旧字符数。
*@param{string}newSubStr插入的字符串。
*@return{string}具有拼接子字符串的新字符串。
*/
String.prototype.splice=函数(start、delCount、newSubStr){
返回this.slice(0,start)+newSubStr+this.slice(start+Math.abs(delCount));
};
}
document.addEventListener(“DOMContentLoaded”),函数(事件){
var rollOverCollectionA=文档
.getElementById(“roll-over-collection-b”)
.getElementsByClassName(“滚动”);
rollOverCollectionA=Array.prototype.slice.apply(rollOverCollectionA);
日志(“rollOverCollectionA”,rollOverCollectionA);
var l=滚动收集A.length;
for(设i=0;i

现在购物

如果我们这里有完整的代码,那么回答这个问题就会容易得多。您可以在此处使用复制问题。我确实看到您的代码笔引用了jQuery;不清楚为什么要在代码中复制它的许多函数。。。没什么问题,只是奇怪。@HereticMonkey我提供了完整的代码。我的代码笔没有使用jQuery。谢谢你!首先,在卷展栏上,您将srcset设置为srcset——这已经用“hover”修改过了。如果你想恢复,你可以替换掉它,或者在突变前保存一份原始的拷贝