Javascript 我可以更改循环中的索引吗?
我有一系列Javascript 我可以更改循环中的索引吗?,javascript,jquery,for-loop,each,html5-audio,Javascript,Jquery,For Loop,Each,Html5 Audio,我有一系列s,每个都有一个颜色名称的id,例如,它加载一个音频文件,并用艺术家和曲目标题填充几个标题标签,这些标题标签是在单击div时从ajax调用中收集的 <div class="songs"></div> <div id="play" onclick="document.getElementById('song').play()"></div> <div> <h2 id="title"></h
s,每个都有一个颜色名称的id,例如
,它加载一个音频文件,并用艺术家和曲目标题填充几个标题标签,这些标题标签是在单击div时从ajax调用中收集的
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
HTML
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
我是否可以使用for循环或$。每个
而不是重复相同的代码并手动更改19个项目中每个项目的div id和项目索引? <div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
这是我的垃圾箱,我在这里计算:
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
相关HTML:
<div id="play" onclick="document.getElementById('song').play()"></div>
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
我不完全确定您想要什么,但这应该会让您走上正确的方向
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
Html
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
然后使用Javascript/jQuery
var html = '';
//Create a div for each fetched song
$.each(data, function(index,item){
html += '<div class="song" data-song-id="'+index+'" data-artist="'+item.artist+'" data-src="'+item.songSrc+'"></div>';
});
// and add them to the div element with the class songs
$('.songs').html(html);
//Listen to clicks on all divs with the class song
$('.songs').on('click', '.song' function(e){
var $this = $(this);
var songId = $this.data('song-id');
var artist = $this.data('artist');
var src = $this.data('src');
$("#song").attr('src',src);
})
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
var html='';
//为每个获取的歌曲创建一个div
$。每个(数据、功能(索引、项目){
html+='';
});
//并将它们与类歌曲一起添加到div元素中
$('.songs').html(html);
//听全班歌曲中所有div的点击
$('.songs')。在('click','.song'函数上(e){
var$this=$(this);
var songId=$this.data('song-id');
var artist=$this.data('artist');
var src=$this.data('src');
$(“#宋”).attr('src',src);
})
我不完全确定您想要什么,但这应该会让您走上正确的方向
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
Html
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
然后使用Javascript/jQuery
var html = '';
//Create a div for each fetched song
$.each(data, function(index,item){
html += '<div class="song" data-song-id="'+index+'" data-artist="'+item.artist+'" data-src="'+item.songSrc+'"></div>';
});
// and add them to the div element with the class songs
$('.songs').html(html);
//Listen to clicks on all divs with the class song
$('.songs').on('click', '.song' function(e){
var $this = $(this);
var songId = $this.data('song-id');
var artist = $this.data('artist');
var src = $this.data('src');
$("#song").attr('src',src);
})
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
var html='';
//为每个获取的歌曲创建一个div
$。每个(数据、功能(索引、项目){
html+='';
});
//并将它们与类歌曲一起添加到div元素中
$('.songs').html(html);
//听全班歌曲中所有div的点击
$('.songs')。在('click','.song'函数上(e){
var$this=$(this);
var songId=$this.data('song-id');
var artist=$this.data('artist');
var src=$this.data('src');
$(“#宋”).attr('src',src);
})
是的,你可以。您必须同时重构html和js。
在HTML中,您必须替换静态div,即具有id的div。相反,请使用一个容器来添加所有歌曲
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
在JS中,为每首歌曲创建DOM元素,并将其附加到歌曲容器中。在此之前,请确保所有元素都具有特定于歌曲数据的“单击”事件处理程序。利用“绑定”
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
HTML
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
JS
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
myUrl='http://meyecare.herokuapp.com/api/v1/songs';
$(window).load(function(){
$.ajax({
url: myUrl,
type: 'GET',
dataType: 'jsonp',
success: function(data) {
$.each(data, function(index,item){
var element = $( "<div id='" + item.color + "'></p>" );
element.on('click', function(){
$("#song").attr('src',this.songSrc);
$("h2").html(this.title);
$("h3").html(this.artist);
}.bind(item));
element.appendTo(".songs");
});
},
error: function(){
console.log('Shnope!');
},
});
});
myUrl='1!'http://meyecare.herokuapp.com/api/v1/songs';
$(窗口)。加载(函数(){
$.ajax({
url:myUrl,
键入:“GET”,
数据类型:“jsonp”,
成功:功能(数据){
$。每个(数据、功能(索引、项目){
var元素=$(“”);
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
元素上('click',function()){
$(“#song”).attr('src',this.songSrc);
$(“h2”).html(此标题);
$(“h3”).html(this.artist);
}.绑定(项目));
元素。追加到(“歌曲”);
});
},
错误:函数(){
console.log('Shnope!');
},
});
});
是的,你可以。您必须同时重构html和js。
在HTML中,您必须替换静态div,即具有id的div。相反,请使用一个容器来添加所有歌曲
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
在JS中,为每首歌曲创建DOM元素,并将其附加到歌曲容器中。在此之前,请确保所有元素都具有特定于歌曲数据的“单击”事件处理程序。利用“绑定”
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
HTML
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
JS
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
myUrl='http://meyecare.herokuapp.com/api/v1/songs';
$(window).load(function(){
$.ajax({
url: myUrl,
type: 'GET',
dataType: 'jsonp',
success: function(data) {
$.each(data, function(index,item){
var element = $( "<div id='" + item.color + "'></p>" );
element.on('click', function(){
$("#song").attr('src',this.songSrc);
$("h2").html(this.title);
$("h3").html(this.artist);
}.bind(item));
element.appendTo(".songs");
});
},
error: function(){
console.log('Shnope!');
},
});
});
myUrl='1!'http://meyecare.herokuapp.com/api/v1/songs';
$(窗口)。加载(函数(){
$.ajax({
url:myUrl,
键入:“GET”,
数据类型:“jsonp”,
成功:功能(数据){
$。每个(数据、功能(索引、项目){
var元素=$(“”);
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
元素上('click',function()){
$(“#song”).attr('src',this.songSrc);
$(“h2”).html(此标题);
$(“h3”).html(this.artist);
}.绑定(项目));
元素。追加到(“歌曲”);
});
},
错误:函数(){
console.log('Shnope!');
},
});
});
为什么不为所有颜色指定一个公共类,然后将对象索引存储在数据属性中。然后,只需单击一次事件即可填充正确的数据。大概是这样的:
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
$(“div.color”)。单击(函数(){
var索引=$(this.data('src');
$(“#宋”).attr('src',data[index].songSrc);
$(“h2”).html(数据[索引].title);
$(“h3”).html(数据[index].artist);
}); 代码>
为什么不为所有颜色指定一个公共类,然后将对象索引存储在数据属性中。然后,只需单击一次事件即可填充正确的数据。大概是这样的:
<div class="songs"></div>
<div id="play" onclick="document.getElementById('song').play()"></div>
<div>
<h2 id="title"></h2>
<h3 id="artist"></h3>
</div>
</div>
$(“div.color”)。单击(函数(){
var索引=$(this.data('src');
$(“#宋”).attr('src',data[index].songSrc);
$(“h2”).html(数据[索引].title);
$(“h3”).html(数据[index].artist);
}); 代码>
我想你基本上做错了:(
@Praveen,你能说得更具体点吗?这是我仍在努力理解的。:(
我想你根本做错了!:(
@Praveen,你能说得更具体点吗?这是我仍在努力理解的。:(
我认为OP希望增加用于访问数据的索引
数组。在您的情况下,您将始终使用该数组中的相同项。$。每个函数将迭代响应数据并增加index@Andy我更新了代码问题,希望它有助于澄清问题。我不知道该如何表达我的问题。基本上我想使用一个循环(如果可能的话),因此我不必为页面上的19个div重复.click函数。上面的代码就是这样做的。在我们添加到dom的所有div上,您只有一个事件处理程序监听click事件。只要它有类名song,我想OP希望增加用于访问数据的索引我将始终使用该数组中的相同项。$。每个函数将迭代响应数据并递增index@Andy我更新了密码问题,h