我正在使用一组函数从URL中提取图像。例如,如果URL是example.com/image/8/,则将加载第8个图像。
问题是,当URL小于10时,它不起作用(并且我的函数将varNumber设置为1,但是当它的10或更多时,功能正常工作。这是代码..
var totalCount = '<?php echo $total; ?>';
HREF = '<?php echo get_permalink($post->ID); ?>';
var url = window.location.pathname;
var urlsplit = url.split("/");
var imgNumber = urlsplit[5];
if (typeof imgNumber === 'undefined') {
imgNumber = 1;
} else if (imgNumber < 1) {
imgNumber = 1;
history.pushState('', '', HREF);
} else if (imgNumber > totalCount) {
alert("else if ( " + imgNumber + " > " + totalCount + ")");
imgNumber = 1;
history.pushState('', '', HREF);
} else {
$("#slider-"+imgNumber).removeClass("img-inactive");
$("#slider-"+imgNumber).addClass("img-active");
$("#slider-1").removeClass("img-active");
$("#slider-1").addClass("img-inactive");
}
正如您所看到的,上面的代码首先检查是否定义了varNumber,然后检查它是否小于1.然后检查它是否大于totalCount。这是搞砸的地方。我检查了我的浏览器控制台并运行警报以验证totalCount和imgNumber有变量。
要获得更好的示例,请参阅以下链接:
imgNumber&gt; totalCount不起作用...... http://badsentinel.com/2014/09/18/daily-giftastic-take-away-these-three-fingers-and-what-are-we-left-with-13-gifs/3/
imgNumber&gt; totalCount很好...... http://badsentinel.com/2014/09/18/daily-giftastic-take-away-these-three-fingers-and-what-are-we-left-with-13-gifs/10/
提前致谢
答案 0 :(得分:1)
首先使用parseInt
解析值,如下所示:
var imgNumber = parseInt(urlsplit[5],10); //second parameter i.e '10' here is radix which is optional but it is advised to use it.
否则,当我们处理string
时, javascript / jquery 值会被视为numbers
,我们必须使用parseInt
或parseFloat
对其进行解析
编辑: - 根据您的评论,请尝试以下操作:
var imgNumber = parseInt(urlsplit[5],10) || 0; //if parseInt() fails to parse value to int then it will return 0 value.
答案 1 :(得分:0)
抓住imgNumber
时,请执行此操作:
var imgNumber = parseInt(urlsplit[5]);
urlsplit[5]
会检索string
,因此您需要将其解析为int
。
答案 2 :(得分:0)
在比较之前,您应该将imgNumber
从从window.location.pathname
检索到的字符串表示显式转换为数字。将字符串值与数字文字进行比较时,数字文字将转换为字符串而不是相反。
请参阅Why is string "11" less than string "3"?,了解他们为何要按此方式进行排序。
答案 3 :(得分:0)
将urlsplit[5];
更改为+urlsplit[5];
,以便将其转换为数字。这是一个字符串。