【发布时间】:2018-12-03 09:34:26
【问题描述】:
单击按钮/触发器时,我需要将特定类“.imageShift”的所有实例的文件夹路径名称从 img/image.jpg 更改为 imgdark/image.jpg。在图像 src 中插入的图像名称在所有出现时都应该保持不变。只是“img”文件夹路径必须替换为“imgdark”。我尝试了下面给出的代码。
$('.themeColor').click(function () {
var getId = $(this).attr('id');
var imagePath = $('.imagePath');
if (getId === 'darkTheme') {
imagePath.attr('src', function (index, attr) {
return attr.replace('img', 'imgdark');
});
} else if (getId === 'lightTheme') {
imagePath.attr('src', function (index, attr) {
return attr.replace('imgdark', 'img');
});
}
});
上述代码运行良好,但每次单击时都会出现控制台错误,如下所示。我需要摆脱那个控制台错误,并像现在一样完成这项工作。如果有人已经这样做了,请提供帮助。
Uncaught TypeError: Cannot read property 'replace' of undefined
at HTMLLIElement.<anonymous> (homepage.js:1619)
at z (jquery-3.3.1.min.js:2)
at w.fn.init.attr (jquery-3.3.1.min.js:2)
at HTMLSpanElement.<anonymous> (homepage.js:1617)
at HTMLSpanElement.dispatch (jquery-3.3.1.min.js:2)
at HTMLSpanElement.y.handle (jquery-3.3.1.min.js:2)
【问题讨论】:
-
您是否有一个可以在控制台中重现错误的工作 jsFiddle 示例?
-
if (getId === 'darkTheme')是否有多个实例具有相同的 id(darkTheme 或 lightTheme)? -
在尝试替换之前检查
attr是否存在。似乎存在属性或imagePath类不存在的情况,因此您不能对其应用替换。我无法真正为您提供解决方案,因为我看不到整个画面,但请尝试使用调试器并逐步执行您的函数,看看为什么会出现属性不存在的情况。 -
您必须检查具有值@Constantin Chirila 的 imagePath 是否注意到此问题。您需要检查 imagePath 是否有值,否则您不允许替换值
-
你有一个错误。当您将
imgdark更改为img时,它实际上更改为imgdarkdark。因为 replase 更改的不是整个字符串,而是其中的一部分 imgdarkdark。您需要在替换中使用正则表达式
标签: javascript jquery html css