jQuery/JavaScript:避免唯一ID';表中的每一行有多少?

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">

我不确定我的做法是否正确。我有一个表格,我用每一行来填充,每一行代表播放列表中的一首歌。现在,我为每行分配一个唯一的ID,并为每个ID分配som jQuery.data()

        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)