gpt4 book ai didi

jquery - 带有手动触发器和选择器选项的 Bootstrap 工具提示

转载 作者:行者123 更新时间:2023-12-03 22:02:51 24 4
gpt4 key购买 nike

我有一个动态表,加载了ajax。我想在将鼠标悬停在上时显示工具提示,但我希望工具提示显示在某个单元格上(带有类 .name) 而不是整行上方。

此外,使用标题函数,我需要能够获取最接近的行 ID 并返回自定义模板。

这是我的代码:

<table class="table" id="myTable">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Country</th>
<th>Statistics</th>
</tr>
</thead>
<tbody>
<tr id="1">
<td >1</td>
<td class="name">Name #1</td>
<td>United States of America</td>
<td>100%</td>
</tr>
<tr id="2">
<td >2</td>
<td class="name">Name #2</td>
<td>United States of America</td>
<td>50%</td>
</tr>
</tbody>
</table>

初始化:

$('#myTable').tooltip({
container: 'body',
html: true,
selector: 'td.name',
trigger: 'manual',
title: function() {
// here will be custom template
var id = $(this).parent().atrr('id');
return id;
}
});

尝试一:Demo in jsFiddle

$('#myTable')
.on('mouseenter focusin', 'tbody > tr', function() {
$(this).find('td.name').tooltip('show');
})
.on('mouseleave focusout', 'tbody > tr', function() {
$(this).find('td.name').tooltip('hide');
});

尝试二:Demo in jsFiddle

var tip;
$('#myTable')
.on('mouseenter focusin', 'tbody > tr', function() {
tip = $(this).find('.offer-name');
tip.tooltip(hereAllTooltipOptions);
tip.tooltip('show');
})
.on('mouseleave focusout', 'tbody > tr', function() {
tip.tooltip('hide');
});

但我对这种解决方案的性能非常好奇。那么,问题是如何去做,并且做得更好?

最佳答案

此处的问题是,当trigger 设置为manual 时,您无法使用selector 选项。 selector is used for delegation when bootstrap is handling the trigger events ,但您已明确表示您将负责处理委托(delegate),因此 ignores the selector setting .

这意味着我们通过使用这样的代码进行预初始化什么也没有:

$('.parent').tooltip({
selector: '.child',
trigger: 'manual'
})

它只是说我想在 .child 元素上设置工具提示,但不要对此执行任何操作,因为我稍后会处理它。

这很好,这就是我们使用手动时想要做的事情。我们将决定何时显示或隐藏工具提示。

让我们看看一个简单的例子:

$('#myTable').on({
'mouseenter': function() {
$(this).find('td.name').tooltip('show');
},
'mouseleave': function() {
$(this).find('td.name').tooltip('hide');
}
},'tbody > tr');

Demo in js Fiddle

但是,这在本例中不起作用,因为我们想要动态生成工具提示。当我们在特定元素上调用 .tooltip('show') 时, Bootstrap 会查看该元素以查看它是否已初始化或具有标题。上面的示例有效,因为我已经在标题中进行了硬编码,但是如果我们想首先初始化此工具提示,我们将如何使用它?

只需在显示工具提示之前即时初始化,如下所示:

$('#myTable').on({
'mouseenter': function() {
$(this).find('td.name')
.tooltip({
container: 'body',
html: true,
trigger: 'manual',
title: function() {
return this.parentNode.id;
}
}).tooltip('show');
},
'mouseleave': function() {
$(this).find('td.name').tooltip('hide');
}
},'tbody > tr');

因此,您不会在每次悬停时产生初始化成本,您可以将初始化包装在 if 语句中 check if it has already been initialized像这样:

var $cell = $(this).find('td.name');
if (!$cell.data("bs.tooltip")) {
$cell.tooltip({ /* options */ });
}
$cell.tooltip('show');

Demo in jsFiddle

关于jquery - 带有手动触发器和选择器选项的 Bootstrap 工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com