假设我们有一个函数generateTooltip()
,它生成并返回DOM元素el
的工具提示的html。如何生成此工具提示并显示 按需 (悬停)?
我想可以预先生成工具提示,并将预生成的html指定为el
的工具提示,但我希望生成 lazy 因为我的generateTooltip(i,j)
为大表格的单元格定义了许多丰富的工具提示。
(目前我只使用jQuery,但如有必要,会添加一个库。)
强调 以防止进一步的误解。不应在页面加载时预先生成工具提示。
答案 0 :(得分:1)
希望这是你正在寻找的......
$("table td.hoverTarget").hover(function(){
var hovered = $(this);
var cellIndex = hovered.eq();
var rowIndex = hovered.parent().eq();
if(hovered.children(".tooltipClass").length) {
hovered.children(".tooltipClass").fadeIn();
}
else {
activeTooltip = generateTooltip(rowIndex,cellIndex);
hovered.append(activeTooltip);
}
}, function(){
var hovered = $(this);
hovered.children(".tooltipClass").fadeOut();
});
这是一个小提琴==> FIDDLE
答案 1 :(得分:0)
此答案适用于运行此代码时尚未生成的单元格。 (jQuery .on()
不支持hover
个事件。)它还将工具提示放在相关单元格的外部(下方),在其他单元格/内容之前。
$('table').on({
mouseover: function(){
var cell = $(this);
if(cell.data('timeout') !== undefined){
clearTimeout(cell.data('timeout'));
cell.removeData('timeout');
showTooltip(cell, false);
}
var timeout = setTimeout(function(){
showTooltip(cell, true);
}, 300); // tooltip delay
cell.data('timeout',timeout);
},
mouseleave: function(){
var cell = $(this);
if(cell.data('timeout') !== undefined){
clearTimeout(cell.data('timeout'));
cell.removeData('timeout');
}
showTooltip(cell, false);
}
}, 'td.hoverTarget');
function showTooltip(cell, show){
if(show){
if(cell.children('.tooltipContainer').length == 0){
var j = cell.parent().children('td').index(cell);
var i = cell.parent().index();
var tooltipContent = generateTooltip(i,j);
if(tooltipContent){
var tooltip = $('<div></div>').addClass('cellTooltip').append(tooltipContent);
var ttc = $('<div></div>').addClass('tooltipContainer').append(tooltip);
cell.append(ttc);
tooltip.hide();
}
}
cell.find('.cellTooltip').fadeIn();
} else {
cell.find('.cellTooltip').fadeOut();
}
}
function generateTooltip(i, j){
// ...
return "HTML for large tooltip.";
}
CSS:
table td.hoverTarget>div.tooltipContainer {
position: relative; /* see https://stackoverflow.com/a/6040258/827280. */
}
table td.hoverTarget>div.tooltipContainer>.cellTooltip {
background-color: white;
border: 1px solid black;
position: absolute;
top: 30px;
z-index: 1;
}