javascript - 从 div 中获取值的脚本,比较它是否是时间值,然后添加它

标签 javascript html css

我在这个页面上:http://teamtreehouse.com/library/build-a-simple-iphone-app-ios7-2#getting-started

目标

如果声明如果它是匹配[0-9]|[0-9]:[0-9][1-9]的值,则将其与其余部分一起添加时间并在 HH:MM:SS 中吐出最后一次。我可以手动将所有这些时间相加,但后来我想起我是一名程序员,所以现在我正在尝试编写脚本。

我试过:

if this.val() == ...

但是它给了我一个关于 this 的错误,所以我不知道从哪里开始。


基本上我想写一个脚本来计算总时间。

$('.achievement-steps ul li a p').each(function(index){

})

返回:

[
<p>​2:13​</p>​
, 
<p>​1 objective​</p>​
, 
<p>​7:23​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​6:19​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​7:05​</p>​
, 
<p>​10:12​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​5:27​</p>​
, 
<p>​2 objectives​</p>​
, 
<p>​1:16​</p>​
, 
<p>​1:20​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​12:25​</p>​
, 
<p>​1 objective​</p>​
, 
<p>​6:58​</p>​
, 
<p>​5:47​</p>​
, 
<p>​3 objectives​</p>​
, 
<p>​3:24​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​6:00​</p>​
, 
<p>​5:42​</p>​
, 
<p>​8:25​</p>​
, 
<p>​3 objectives​</p>​
, 
<p>​8:27​</p>​
, 
<p>​4 questions​</p>​
, 
<p>​7:18​</p>​
, 
<p>​1 objective​</p>​
, 
<p>​5:53​</p>​
, 
<p>​2:11​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​18:02​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​7:49​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​7:55​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​11:27​</p>​
, 
<p>​3 objectives​</p>​
, 
<p>​6:11​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​7:30​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​7:37​</p>​
, 
<p>​11:19​</p>​
, 
<p>​5 questions​</p>​
, 
<p>​7:08​</p>​
, 
<p>​5 questions​</p>​
]

最佳答案

代码:

// get texts
var textList = $('.achievement-steps ul li a p').map(
        function(index,element){return $(element).html();});
// filter by regex
var timeList = $.grep(textList,
        function(element,index){return element.match(/^\d{1,2}:\d{1,2}$/)!=null;});
// split by ":"
var tmp = timeList.map(
        function(element){return element.split(":")});
// mins and secs
var mins = tmp.map(function(element){return element[0];}),
    secs = tmp.map(function(element){return element[1];});
// sum
var totalMins =  mins.reduce(function(a,b){return +a+(+b);});
var totalSeconds = totalMins * 60 + secs.reduce(function(a,b){return +a+(+b);});

console.log(Math.floor(totalSeconds/60) + 'Mins,' + totalSeconds % 60 + 'secs');
// 198Mins,43secs 

我正在努力学习 jQuery.map , jQuery.grep , Array.prototype.reduce() ,所以这个答案可能比它应该的要复杂一些。

关于javascript - 从 div 中获取值的脚本,比较它是否是时间值,然后添加它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410037/

相关文章:

javascript - 在Reactjs中绑定(bind)数据

javascript - 正好两个或三个单词的正则表达式

javascript - 如何从 javascript MDL 文本字段显示错误密码错误消息

html - CSS 动画 : squares loader

HTML 将样式应用于 CSS 中的多个 div

javascript - 获取 Iframe 的高度和 resize 事件

javascript - 在离线页面中使用 javascript

javascript - 在不修改 CSS 文件的情况下删除 CSS @media 打印规则

javascript - 你如何判断 HTML5 视频是实时流还是来自 Javascript 的视频?

javascript - 为什么条形图的颜色没有填充并保持白色? d3js