您有太多代码无法替换单个数字。
$("#image").attr("src", $("#image").attr("src").replace(/\d/, function(s) {
return +s+1;
}));
小提琴
或者更坚固的版本(确保数字后跟.jpg
并且可以接受多个一位数):
$("#image").attr("src", $("#image").attr("src").replace(/(\d+)\.jpg/, function(s, m) {
return (parseInt(m, 10)+1) + '.jpg';
}));
小提琴
parseInt()
将字符串解析为指定基数/基数的整数——10
对应于小数。这样做是为了让 JS 引擎不会假设一个数字应该是八进制,如果它以0
例如开头。好吧,当您使用小数时,请parseInt(myNumber, 10)
确保将其解析为十进制整数。
.attr
你应该熟悉,它在传递 1 个参数时检索给定的 HTML 属性,并在传递 2 个参数时设置给定的属性。所以基本上,在将方法应用到它之后,我将src
属性设置为相同。src
replace
该string.replace
方法采用 2 个参数,在这种情况下,我使用正则表达式(正则表达式)来匹配数字字符(\d
是一个表示字符类[0-9]
),后跟文字.jpg
字符串,并将它们替换为以 1 递增的匹配数字。
该replace
方法的第二个参数中的函数对象将整个匹配 ( s
) 作为参数,然后是 N 个捕获组(m
= \d+
= 一个或多个数字字符)。因为我只有一个捕获组,所以我给函数提供了 2 个参数,这样我就可以使用捕获的组并在函数对象内增加它,返回增加的数字 +.jpg
以替换number.jpg
原始源中的。
由于您的代码无法正常工作,我唯一的猜测是您没有从字符串中删除所有非数字字符,因此当++
增量运算符尝试强制进行类型转换时,它只返回 a NaN
,因为给定的字符串失败被解析为整数。使用我的替换方法,它只从字符串中获取数字并将其递增,与字符串的其余部分无关。
编辑:
我发现了您的代码的主要问题,$("#image").prop("src")
检索了图像的完整URL,这就是为什么,正如我上面的段落所暗示的,您没有删除所有非数字字符并且它未能评估为整数。将其替换.prop
为.attr
可能会使您的原始代码也能正常工作。
++
尽管在使用后增量运算符并在同一范围内多次声明相同的变量名称后,您不应将变量分配给自身,这被认为是不好的做法(大多数 JS 解释器忽略重新声明,但它是草率的编码)。
所以代码的另一个更正版本:
var imagePath = $("#image").attr("src"); //use .attr as .prop returns full URL
imagePath = imagePath.replace('images/big/', '').replace('.jpg', '');
imagePath++;
imagePath = "images/big/"+imagePath+".jpg";
$("#image").attr("src", imagePath);