更改单独元素中的javascript变量



我运行了一个基于php(phpbb)、javascript和html的魔兽世界公会论坛。从那以后,Wowhead允许将链接发布到他们的物品/拼写ID等。Wowhead JS及其变量的基本代码是:

<script src="//static.wowhead.com/widgets/power.js"></script>
<script>var wowhead_tooltips = { "colorlinks": true, "iconizelinks": true, "renamelinks": true }</script>

有一个扩展可以通过HTML文件将这些代码放在每页的页脚中。发布的每个Wowhead链接都将转换为一个链接,该链接带有解释其链接内容的工具提示。Wowhead_toltips变量的"renamelink":true部分使项目或拼写的任何链接都被重命名为其链接的确切名称。

问题是:当我使用Wowhead链接生成自定义URL时,即:

<a href="http://www.wowhead.com/spell=1953">Teleport</a>

它不会显示带有Blink工具提示的"Teleport",而是将整个URL重命名为带有图标的Blink,如wowhead_toltips变量中所述。

我想要实现的是:

  1. 任何直接指向Wowhead的URL都应该转换为重命名的拼写/项目
  2. Wowhead的任何自定义URL都应该保留其自定义文本,但要检索工具提示
  3. 这两者都应该在一个页面上实现

我想出的最好的解决方案是根据类向var wowhead_toltips添加一个"if"函数,然后将类添加到URL:

<script>if ($('a').hasClass("wowrename")) { var wowhead_tooltips = { "colorlinks": true, "iconizelinks": true, "renamelinks": false } }</script>
<a class="wowrename" href="http://www.wowhead.com/spell=1953">Teleport</a>

然而,这种解决方案的问题是,一旦脚本识别出页面上一个类为"wowrename"的URL,它将停止重命名所有链接,这意味着自定义URL和直接URL不能混合在一个页面上。

我尝试过的任何其他解决方案,使用ID、定义不同的变量等,要么都不起作用,要么都有相同的限制。

因此,问题是,是否可以根据id、类或其他任何东西,更改每个元素(URL)的Javascript变量(在本例中为"var-wowhad_toltips{"renamelinks":false}")?

使用工具提示和iccn重命名的直接链接。

<a href="http://www.wowhead.com/spell=1953">Teleport</a>

带有工具提示和原始文本的自定义链接。我已经将原始链接文本存储为数据属性,这样我们就可以在更改后恢复它。

<a class="wowrename" href="http://www.wowhead.com/spell=1953" data-value="Teleport">Teleport</a>

请继续检查static.wowhead.com/widgets/power.js何时更改最后一个链接文本。更改后,使用data-value值进行恢复,删除创建图标的样式并停止计时器。

$(function () {
//timmer
checkChanged = setInterval(function () {
// check for when the last link text has changed
var lastItem = $("a.wowrenameoff").last();
if (lastItem.text() !== lastItem.data('value')) {
$("a.wowrenameoff").each(function () {
//change value
$(this).text($(this).data('value'));
//remove icon
$(this).attr('style', '');
//stop timer
clearInterval(checkChanged);
});
}
i++;
}, 100);
});

这确实会导致链接图标先闪烁后关闭,但在页面刷新后会重复。

JSFiddle演示

这是一个简单的解决方案。这不是最好的方法。

var wowhead_tooltips = { "colorlinks": true, "iconizelinks": true, "renamelinks": true }
$('a').hover(function() {
if ($(this).hasClass('wowrename') {
wowhead_tooltips.renamelinks = true;
}
else {
wowhead_tooltips.renamelinks = false;
}
});

我不知道wowhead API是如何工作的,但如果wowhead_toolips变量正好在用户用鼠标指向链接的那一刻加载(没有任何超时),这可能会失败或随机工作/不工作
原因可能是javascript不知道首先执行哪个函数。

我希望这会奏效。如果没有评论,我会考虑另一种方式。

您必须在所有链接上循环,如下所示:

$("a.wowrename").each(function() {
// some code
});

最新更新