Search code examples
javascriptjqueryjsonmouseentermouseleave

show/hide table column on mouseenter with dynamic div id


I have a table where I want to show the last column only if the column before is hovered. The table data is parsed with 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>

in the example above the code is working but I have to reference the id as "#hover_9242411" and "#hidden_9242411". the part after hover_/hidden_ is dynamically added to each column with a for loop. How can I dynamically reference the second part (9242411)?


Solution

  • Consider modifying your hover cell to something like this:

    '<td id="hover_' + data[i]["entity_id"] + '" class="hover-cell" data-target="#hidden_' + data[i]["entity_id"] + '">'
    

    You could then simply use:

    $(document).on("mouseover", ".hover-cell", function() {
        var target = $(this).data('target');
        $(target).show();
    });
    

    Fiddle