javascript - 如何在循环中更新 html 标签的值而不覆盖前几轮

标签 javascript jquery html audio

我有一些轨道的网址列表。我想在 html 列表中显示每个轨道的持续时间。我可以设法从函数中获取持续时间值,但问题是在循环的每一轮中,它都会使用从持续时间函数中获取的新值覆盖给定的标记。因此整个列表会一遍又一遍地更新。

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>

关于javascript - 如何在循环中更新 html 标签的值而不覆盖前几轮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656295/

相关文章:

javascript - 使 onClick 按钮与 div 重叠内容

c# - jQuery ajax调用未击中 Controller ,因为字符串数据参数较大

javascript - 如何解除绑定(bind)此 .click 操作?

html - 纯 CSS Accordion 切换

javascript - 在 AngularJS 单元/集成测试中向 HTTP 服务器发出真实请求

javascript - 如何在 Angular 中对嵌套订阅方法进行单元测试?

php - 避免两次打开同一页面

javascript - 如何在 React 中通过类名访问所有 dom 元素?

javascript - jQuery 在悬停时显示/隐藏 div(多个实例)

jquery - Data-role = "none"忽略我的 css 样式