Когда вы просматриваете ваш код, по большей части это кажется именно тем, что вы пытаетесь выполнить - таблица была немного вялой в том, как она была отформатирована (открывать и закрывать TH и TD <th>...</th>
и <td>...</td>
- но я также не знаком с шаблонами Tal).
Но, сократив ваш код до минимума и повторно использовав его, я создал следующее решение.
Единственное другое реальное редактирование - это то, что я добавил в событие mouseleave()
на #floating_div
, заполнение div непосредственно под курсором может вызвать путаницу с курсором. Там, где он думал, что он сидит на вершине <td>
, теперь он внезапно сидит на вершине #floating_div
. Таким образом, «уход» <td>
не работает. Это потому, что курсор теперь находится над чем-то другим и оставит это.
$("td").on({
mouseenter: function(e){
//console.log( 'in', this );
let output = $(this).closest("table").find("tr > th").eq($(this).index()).html();
$('#floating_div').html( output );
$('#floating_div').removeClass('hidden');
$('#floating_div').css({left: e.pageX, top: e.pageY});
},
mouseleave: function(e){
//console.log( 'out', this );
$('#floating_div').addClass('hidden');
},
});
$('#floating_div').mouseleave( function(){
$(this).addClass('hidden');
});
*{ margin: 0; padding: 0; font-family: Arial, sans-serif; }
table, td, th{ padding: 5px; border: solid 1px rgba( 0, 0, 0, 0.25); }
#floating_div{
position: absolute;
top: 0;
left: 0;
padding: 15px;
display: block;
background-color: rebeccapurple;
color: white;
pointer-events: none;
}
#floating_div.hidden{
display: none;
top: -1000px;
left: -1000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<th>header 1</th>
<th>header 2</th>
</tr>
<tr>
<td>data 1</td>
<td>data 2</td>
</tr>
</table>
<div id="floating_div" class="hidden"></div>