jQuery/JavaScript:避免唯一ID';表中的每一行有多少?
我不确定我的做法是否正确。我有一个表格,我用每一行来填充,每一行代表播放列表中的一首歌。现在,我为每行分配一个唯一的ID,并为每个ID分配som jQuery.data()jQuery/JavaScript:避免唯一ID';表中的每一行有多少?,javascript,jquery,Javascript,Jquery,我不确定我的做法是否正确。我有一个表格,我用每一行来填充,每一行代表播放列表中的一首歌。现在,我为每行分配一个唯一的ID,并为每个ID分配som jQuery.data() html += '\ <tr id="track-' + i + '" class="tracks-row"> \ <td class="track"><a id="play-'+ i +'" class="play">
html += '\
<tr id="track-' + i + '" class="tracks-row"> \
<td class="track"><a id="play-'+ i +'" class="play"></a><a id="play2-' + i + '">' + song.song_track + '<span class="mix-style">' + song_mix + '</span></a></td> \
<td class="artist">' + song.song_artist + '</td> \
<td class="favourites-holder"><a id="favourite-' + i + '" class="favourites"></a></td> \
' + delete_holder + ' \
</tr> \
';
。。。还有。单击每个曲目的事件,允许用户播放、排序、拖动等。。。感觉好像我做错了:)?唯一id有意义,或者使用元数据插件存储与每行相关的所有额外数据 它将存储以下数据:
<li class='someclass' data="{some:'random', json: 'data'}">...</li>
唯一id是有意义的,或者使用元数据插件来存储与每行相关的所有额外数据 它将存储以下数据:
<li class='someclass' data="{some:'random', json: 'data'}">...</li>
tr
是需要一个唯一的id,还是仅仅需要一个泛型类,这在很大程度上取决于您打算使用javascript(用于定位行)还是css(也用于定位行)。如果需要专门针对一行进行样式设置或脚本效果,则使用唯一id是一种有效的方法。如果没有,那么可能是额外的“加价”是不必要的
在任何情况下,如果您确实使用id,请确保它们是唯一的:-)是
tr
需要唯一的id还是仅仅是泛型类在很大程度上取决于您打算使用javascript(用于定位行)还是css(也用于定位行)。如果需要专门针对一行进行样式设置或脚本效果,则使用唯一id是一种有效的方法。如果没有,那么可能是额外的“加价”是不必要的
在任何情况下,如果确实使用id,请确保它们是唯一的:-)您可以在循环中存储对每个生成行的引用(假设
html
仅包含单行的html):
有一个元素的ID是不错的。但是,如果您有一个引用并且没有反复使用jQuery的选择器引擎,那么使用引用肯定会更快
此外,如果您将相同的单击处理程序附加到每一行,则最好只将一个单击处理程序附加到表并将其委派,例如
$('#table').delegate('tr', 'click', function(){...});
您可以在循环中存储对每个生成行的引用(假设
html
仅包含单个行的html):
有一个元素的ID是不错的。但是,如果您有一个引用并且没有反复使用jQuery的选择器引擎,那么使用引用肯定会更快
此外,如果您将相同的单击处理程序附加到每一行,则最好只将一个单击处理程序附加到表并将其委派,例如
$('#table').delegate('tr', 'click', function(){...});
jquery可能是这样的:
var songs = function(songList){
this.songs = songlist;
this.init();
}
$.extend(songs.prototype, {
init: function(){
var self = this;
var table = $('#myTableID');
for(var i = 0; i < this.songs.length; i++){
var song = this.songs[i];
var songData = $('<tr><td class="track">'+song.track+'</td><td class="artist">'+song.artist + '</td></tr>');
table.append(songData);
songData.find('td.track:first')click(function){
self.SongClick(song.track);
});
//add other events here
}
}
},
SongClick : function(track){
//add here you click event
},
otherEvent : function(track){
//add otherEvent code
}
});
当它初始化时,它将检索一个id为myTableID的表,并在列表中检索foreach song,它将附加元素,并将事件直接附加到这些元素。在jquery中可能是这样的:
var songs = function(songList){
this.songs = songlist;
this.init();
}
$.extend(songs.prototype, {
init: function(){
var self = this;
var table = $('#myTableID');
for(var i = 0; i < this.songs.length; i++){
var song = this.songs[i];
var songData = $('<tr><td class="track">'+song.track+'</td><td class="artist">'+song.artist + '</td></tr>');
table.append(songData);
songData.find('td.track:first')click(function){
self.SongClick(song.track);
});
//add other events here
}
}
},
SongClick : function(track){
//add here you click event
},
otherEvent : function(track){
//add otherEvent code
}
});
当它初始化时,它将检索一个id为myTableID的表,并在列表中检索foreach song,它将附加元素,并将事件直接附加到这些元素。拥有唯一id总是一个好主意。我觉得。。。做得好。别对自己太苛刻了。拥有独一无二的身份证总是个好主意。我觉得很合适。。。做得好。不要对自己太苛刻。
var so = new songs(mySongList)