如何在循环中更新html标记的值而不覆盖前几轮
How to update the value of a html tag in a loop without overriding previous rounds
我有一些曲目的url列表。我想在html列表中显示每个曲目的持续时间。我可以设法从函数中获取duration值,但问题是在循环的每一轮中,它都会用从duration函数中获取的新值覆盖给定的标记。因此,整个列表会不断更新。
var src1, src2, src3, trackArray;
src1 = "https://goo.gl/o4nxfq";
src2 = "https://goo.gl/wc1pgB";
src3 = "https://goo.gl/25uOY6";
trackArray = [src1, src2, src3];
function initAudioPlayer(){
$.each(trackArray, function( index, value ) {
$(".panel").append(
"<li>Track #"+ index +" >> <span class='due'></span></li>"
);
getDuration(value, ".due");
});
}
function getDuration(src, destination) {
var audio = new Audio();
$(audio).on("loadedmetadata", function(){
$(destination).html(audio.duration);
});
audio.src = src;
}
$(document).ready(function(){
initAudioPlayer();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="panel"></ul>
正如您所看到的,它显示了所有li
标记的最后一轮循环的值。有什么想法可以修复它,使其在列表中显示真实值吗?
通过.due
,您的目标是具有类due
的所有元素。你也应该通过index
,例如:
var src1, src2, src3, trackArray;
src1 = "https://goo.gl/o4nxfq";
src2 = "https://goo.gl/wc1pgB";
src3 = "https://goo.gl/25uOY6";
trackArray = [src1, src2, src3];
function initAudioPlayer(){
$.each(trackArray, function( index, value ) {
$(".panel").append(
"<li>Track #"+ index +" >> <span class='due'></span></li>"
);
getDuration(value, ".due", index);
});
}
function getDuration(src, destination, index) {
var audio = new Audio();
$(audio).on("loadedmetadata", function(){
$(destination).eq(index).html(this.duration);
});
audio.src = src;
}
$(document).ready(function(){
initAudioPlayer();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="panel"></ul>
var src1, src2, src3, trackArray;
src1 = "https://goo.gl/o4nxfq";
src2 = "https://goo.gl/wc1pgB";
src3 = "https://goo.gl/25uOY6";
trackArray = [src1, src2, src3];
function initAudioPlayer(){
$.each(trackArray, function( index, value ) {
$(".panel").append(
"<li>Track #"+ index +" >> <span class='due'></span></li>"
);
getDuration(value, ".due");
});
}
function getDuration(src, destination) {
var audio = new Audio();
$(audio).on("loadedmetadata", function(){
$(destination).html(audio.duration);
});
audio.src = src;
}
$(document).ready(function(){
initAudioPlayer();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="panel"></ul>
给每个跨度一个唯一的类,例如
在这个例子中,它将是.due0,.due1,…,而不是.due
如果您使用的是类名。由于样式的原因,每个跨度也将有类别due
和due#
function initAudioPlayer(){
$.each(trackArray, function( index, value ) {
$(".panel").append(
"<li>Track #"+ index +" >> <span class='due due"+index+"'></span></li>"
);
getDuration(value, ".due"+index);
});
}
相关文章:
- 在循环中分配json值时,值被覆盖
- 谷歌地图固定位置覆盖
- 只覆盖箭头键滚动事件
- JQuery覆盖不更改单选选项
- 操作员”;新的“;根据我想在几个JavaScript文件中使用的类,在JavaScript中使用
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 将添加一个相同类型的事件附加或覆盖以前添加的具有相同名称的事件
- 传单中如何在更改基层时启用/禁用覆盖层
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- HTML/CSS-用于拖放的全页面覆盖
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 覆盖函数中的函数
- 无法覆盖CSS伪元素:before
- 如何覆盖原型中的事件侦听器
- 覆盖在赢得'不允许点击下面的标记,谷歌地图api v3
- 如何覆盖主干中的extend方法
- jQuery:带有修改的微小轮播 - 覆盖有时为时已晚(小提琴)
- 如何在不编辑的情况下覆盖插件的几个参数
- 如何在循环中更新html标记的值而不覆盖前几轮
- 覆盖套接字侦听器(设置几个类似的侦听器)