【问题标题】:Change javascript variable in seperate element在单独的元素中更改 javascript 变量
【发布时间】:2015-06-23 01:56:40
【问题描述】:

我运行一个基于 php (phpbb)、javascript 和 html 的 WoW 公会论坛。很久以来,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_tooltips 变量的 '"renamelink": true' 部分使得物品或法术的任何链接都被重命名为它所链接的确切名称。

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

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

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

我想要实现的是:

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

我想出的最佳解决方案是在基于类的 var wowhead_tooltips 中添加一个 '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、class 或其他任何内容更改每个元素 (URL) 的 Javascript 变量(在本例中为“var wowhead_tooltips { "renamelinks": false}"?

【问题讨论】:

    标签: javascript html class variables element


    【解决方案1】:

    使用 tooltip 和 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 demo

    【讨论】:

    • 是的,就是这样!老实说,我确实了解此更改发生的情况,但它有效,但我想了解:如果我正确掌握它,您让脚本运行,由于 data-href 无法识别直接链接,然后将 data-href 更改为 href 以保留链接但不会重命名?
    • 我注意到这个修复的一个小问题:最初它工作正常,但是当我重新加载页面时,它无论如何都会重命名任何自定义 URL。当我离开页面并直接返回时,它会自行恢复。这是一个小问题,但有解决办法吗?
    • 我已更新我的答案以帮助解决重新加载问题。希望它也能得到更好的解释。如果不只是再问一次。
    • 我明白你对图标闪烁的意思,但这不是问题。再次非常感谢!我正在掌握它在做什么的概念。如果你没问题,我想我会指导扩展的作者(phpbb 的 Gametooltips,作者 PayBas)到这个答案是否他想在 phpbb 扩展中包含一个变体。对于那些也对 phpbb 感兴趣的人:我添加了自己的 bbCode:BBCode: [wow={TEXT1}]{TEXT2}[/wow] HTML: &lt;a class="wowrenameoff" href="http://www.wowhead.com/{TEXT1}" data-value="{TEXT2}"&gt;{TEXT2}&lt;/a&gt;
    • 轻微补充:BBCode HTML 包含类“wowrenameoff”;我重命名了该类,因为我认为它更合乎逻辑,因为它可以防止重命名。为了使其工作,脚本中的类必须重命名为“wowrenameoff”(a.wowrenameoff),或者 BBCode 中的类必须重命名为“wowrename”。
    【解决方案2】:

    你必须循环所有的链接,像这样:

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

    【讨论】:

    • 我试过这个添加:codevar wowhead_tooltips = { "colorlinks": true, "iconizelinks": true, "renamelinks": false } 但它似乎不起作用......似乎是我正在寻找的东西,但不知道为什么它不起作用。
    • 您建议在循环中使用什么代码?在此循环内更改 wowhead_variable 是没有意义的。结果将是 -> 属性 wowhead_tooltips.renamelinks 将是 true 所有链接的行为将是 renamelinks
    【解决方案3】:

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

    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_tooltips 变量恰好在用户用鼠标指向链接的那一刻加载(没有任何超时) - 这可能会失败或随机工作/不工作。 原因可能是 javascript 不知道先执行哪个函数。

    我希望这会奏效。如果不是 - 评论我会考虑另一种方式。

    【讨论】:

    • 我试过了,但没有用。我认为本质上这不是我正在寻找的修复程序,因为如果我理解正确,这只会根据链接是否悬停在上面来更改脚本。如果页面已加载,我希望它是。
    • 实际上wowhead_tooltips 变量用于所有链接。你可以看到wowhead_tooltip.renamelinks 是复数形式。我将寻找可以仅在特定链接处设置renamelins 功能的东西。
    猜你喜欢
    • 2014-12-27
    • 2017-06-24
    • 2017-05-29
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    相关资源
    最近更新 更多