我正在尝试编写一个 chrome 扩展来突出显示某些名称,并在工具提示中为您提供有关该名称的其他信息。基本上,我有一个名称和 ID 如下的对象:
var list = {
'Name1' : 'ID0001',
'Name2' : 'ID0002',
}
然后我使用 jQuery 高亮插件来突出显示文档中键的每次出现,并分配一个 span 元素,其类对应于键的值(例如 ID0001),效果很好......
$.each(list, function(key, value) {
$("p").highlight(key, {caseSensitive: false, className: value });
});
结果是:
<span class="ID0001">Name_1</span>
接下来,我尝试选择每个类名包含 ID 第一部分的元素并激活 Tooltipster:
$('span[class*=ID]').tooltipster({
interactive: true,
content: $(<p>Loading...</p>),
contentAsHTML: true,
functionBefore: function(origin, continueTooltip) {
continueTooltip();
// Below, I'm trying to get whole ID, without the
// 'tooltipstered' class, that Tooltipster assigned.
var id = $(this).attr('class').replace(' tooltipstered','');
$.getJSON(chrome.extension.getURL('db.json'), function(db) {
// Inside here, I'm using the ID to get information from a json
// file and store it in a variable called 'content', e.g.
var content = '<p>db[id].link</p>';
// Then I'm trying to update the content of the tooltip:
origin.tooltipster({
content: content,
contentAsHTML: true
});
}
});
所有这些代码都在这个里面:
$(document).ready(function() { });
现在,如果我第一次将鼠标悬停在带有名称的跨度上,tooltipster 不会做任何事情,Chrome 控制台会这样说:
Uncaught ReferenceError: content is not defined
但是我第二次将鼠标悬停在它上面,它会向我显示正确的内容。此外,如果我第一次将鼠标悬停在一个名称上,第二次将鼠标悬停在另一个名称上,则工具提示将显示第一个名称的内容。
我对 JS 和 jQuery 还很陌生,我只是不知道我在这里做错了什么。
我发现了一些关于类似问题的其他线程,但没有一个提议的解决方案对我有用。
这是“完整”的更新代码:
$(document).ready(function() {
$.each(list, function(key, value) {
$("p").highlight(key, {caseSensitive: false, className: value });
});
$('span[class*=ID]').tooltipster({
interactive: true,
contentAsHTML: true,
content: 'Loading...',
functionBefore: function(origin, continueTooltip) {
continueTooltip();
var id = $(this).attr('class').replace(' tooltipstered','');
var content = generate_content(id);
origin.tooltipster('content', content);
}
});
function generate_content(id) {
$.getJSON(chrome.extension.getURL('db.json'), function(db) {
// Getting information from the .sjon and storing it in "content"
});
return content;
}
});