show/hide table mouseenter 上具有动态 div id 的列
show/hide table column on mouseenter with dynamic div id
我有一个 table,我只想在悬停前一列时显示最后一列。 table 数据用 JSON 解析。
<script type="text/javascript">
$( document ).ready(function() {
var tag_id = $('#tag_id_hidden').val();
$.getJSON("/tags/get_who_tagged/" + '{{tag.tag_id}}' + "/", function(data) {
var lines = '';
for (var i = 0; i < data.length; i++) {
lines += '<tr id="' + data[i]['entity_id'] + '">';
lines += '<td id="button_id"><button id="prefix_' + data[i]["entity_id"] + '" class="js-programmatic-set-val" value="' + data[i]["entity_id"] + '" name="' + data[i]["title"] + '"><i class="fa fa-plus"></i></button></td>';
lines += '<td><a href="/entities/' + data[i]['entity_id'] + '/' + data[i]['slug'] + '/" class="user_link">' + data[i]['title'] + '</a></td>';
lines += '<td id="hover_' + data[i]["entity_id"] + '">' + data[i]['count'] + '</td>';
lines += '<td id="hidden_' + data[i]["entity_id"] + '" style="display:none;">'
for (var j = 0; j < data[i]['usernames'].length; j++) {
lines += data[i]['usernames'][j]['username'] + ', '
}
lines += '</td>';
lines += '</tr>';
//$("#count_user_table").empty();
$('#count_user_table tbody').html(lines);
}
});
});
</script>
<script>
$(document).on("mouseenter", "#hover_9242411", function() {$("#hidden_9242411").show();
});
$(document).on("mouseleave", "#hover_9242411", function() {$("#hidden_9242411").hide();
});
</script>
在上面的示例中,代码可以正常工作,但我必须将 id 引用为“#hover_9242411”和“#hidden_9242411”。 hover_/hidden_ 之后的部分通过 for 循环动态添加到每一列。如何动态引用第二部分 (9242411)?
考虑将您的 hover
单元格修改为如下内容:
'<td id="hover_' + data[i]["entity_id"] + '" class="hover-cell" data-target="#hidden_' + data[i]["entity_id"] + '">'
然后您可以简单地使用:
$(document).on("mouseover", ".hover-cell", function() {
var target = $(this).data('target');
$(target).show();
});
如果它始终是上一列 showing/hiding 和 下一 列,您可以像这样编写事件处理程序
$('#mytable').on('mouseenter', 'td.hover-column', function(){
$(this).next().show();
}).on('mouseleave', 'td.hover-column', function(){
$(this).next().hide();
});
要使该示例正常工作,您需要将 class 添加到悬停列(您希望将鼠标悬停在其上以显示下一列的列)。我还为 table 提供了一个 id,并为其分配了事件处理程序,这样事件就不必一直冒泡到顶部。
这里有一个fiddle
如果您稍后发现 showing/hiding 不是 NEXT 列而是其他列,您也可以在该隐藏列上放置一个特定的 class 而不是使用
$(this).next().show();
你可以使用像
这样的东西
$(this).closest('tr').find('td.hidden-column').show();
我有一个 table,我只想在悬停前一列时显示最后一列。 table 数据用 JSON 解析。
<script type="text/javascript">
$( document ).ready(function() {
var tag_id = $('#tag_id_hidden').val();
$.getJSON("/tags/get_who_tagged/" + '{{tag.tag_id}}' + "/", function(data) {
var lines = '';
for (var i = 0; i < data.length; i++) {
lines += '<tr id="' + data[i]['entity_id'] + '">';
lines += '<td id="button_id"><button id="prefix_' + data[i]["entity_id"] + '" class="js-programmatic-set-val" value="' + data[i]["entity_id"] + '" name="' + data[i]["title"] + '"><i class="fa fa-plus"></i></button></td>';
lines += '<td><a href="/entities/' + data[i]['entity_id'] + '/' + data[i]['slug'] + '/" class="user_link">' + data[i]['title'] + '</a></td>';
lines += '<td id="hover_' + data[i]["entity_id"] + '">' + data[i]['count'] + '</td>';
lines += '<td id="hidden_' + data[i]["entity_id"] + '" style="display:none;">'
for (var j = 0; j < data[i]['usernames'].length; j++) {
lines += data[i]['usernames'][j]['username'] + ', '
}
lines += '</td>';
lines += '</tr>';
//$("#count_user_table").empty();
$('#count_user_table tbody').html(lines);
}
});
});
</script>
<script>
$(document).on("mouseenter", "#hover_9242411", function() {$("#hidden_9242411").show();
});
$(document).on("mouseleave", "#hover_9242411", function() {$("#hidden_9242411").hide();
});
</script>
在上面的示例中,代码可以正常工作,但我必须将 id 引用为“#hover_9242411”和“#hidden_9242411”。 hover_/hidden_ 之后的部分通过 for 循环动态添加到每一列。如何动态引用第二部分 (9242411)?
考虑将您的 hover
单元格修改为如下内容:
'<td id="hover_' + data[i]["entity_id"] + '" class="hover-cell" data-target="#hidden_' + data[i]["entity_id"] + '">'
然后您可以简单地使用:
$(document).on("mouseover", ".hover-cell", function() {
var target = $(this).data('target');
$(target).show();
});
如果它始终是上一列 showing/hiding 和 下一 列,您可以像这样编写事件处理程序
$('#mytable').on('mouseenter', 'td.hover-column', function(){
$(this).next().show();
}).on('mouseleave', 'td.hover-column', function(){
$(this).next().hide();
});
要使该示例正常工作,您需要将 class 添加到悬停列(您希望将鼠标悬停在其上以显示下一列的列)。我还为 table 提供了一个 id,并为其分配了事件处理程序,这样事件就不必一直冒泡到顶部。 这里有一个fiddle
如果您稍后发现 showing/hiding 不是 NEXT 列而是其他列,您也可以在该隐藏列上放置一个特定的 class 而不是使用
$(this).next().show();
你可以使用像
这样的东西$(this).closest('tr').find('td.hidden-column').show();