0

我一直在研究这个小提琴的一个分支——所有的道具都归原作者所有。

它旨在与 ImageMapster 一起使用,以在悬停在图像地图上时突出显示 html 列表项,反之亦然,在悬停列表项时突出显示适当的图像地图。正如您所期望的那样,它可以通过在适当的位置添加和删除一个类来工作。

我一直在尝试将该代码(及其变体)与 Drupal 7 一起使用,它为菜单项的锚点及其列表项包装器添加了大量自己的类。额外的标记导致上述脚本出现问题,让我摸不着头脑。

通过大量的试验和错误(我不太擅长 JS!)我已经意识到,特别是当 Drupal 向 li 添加一个 'menu-depth-1' 类时,脚本会丢失,并抛出错误(来自铬):

Uncaught Error: Syntax error, unrecognized expression: area[name=part-1 menu]

在上述脚本的这个分支中,我添加的只是 Drupal 添加的标记。

http://jsfiddle.net/PUncle/Tr4hE/32/

从以下位置更改原始脚本:

<li class="menu-item-a"><a href="#">Part A</a></li>

至:

<li class="leaf menu-depth-1 menu-item-a"><a href="#">Part A</a></li

据我了解,该脚本正在寻找一个带连字符的选择器,当它在到达所需的“menu-item-a”之前遇到“menu-depth-1”时,它会失败。

我认为正是脚本的这一部分有问题,但无论我尝试什么,我都不知道如何修复它。

function highlightArea(key) {
    $('area[name=part-' + key + ']').mouseenter();
    $('a').removeClass('hover');
    $('li.menu-item-' + key + ' a').addClass('hover');
}

我需要做的是“强化”脚本,使其非常专门针对特定选择器并忽略其他任何内容。

我确实开始着手清理 Drupals 过多的菜单标记,但决定为“钝”代码扫清障碍可能不如锐化该代码有效,这样就没有其他东西可以影响它了!

任何指针将不胜感激。

4

2 回答 2

0

尝试这个

        $('a').hover(function () {
            var parts = $(this).closest('li').attr('class').split(' ');
            var parts1 = parts[1].split('-');
            var part = parts1[2];
            highlightArea(part);
        });

        //
        $('a').mouseleave(function () {
            var parts = $(this).closest('li').attr('class').split(' ');
            var parts1 = parts[1].split('-');
            var part = parts1[2];
            highlightAreaX(part);
        });
于 2013-07-10T13:17:31.220 回答
0

选择器看起来很可疑。你不是说

area[name="part-1 menu"]

(当没有括号时,我自己已经遇到过此类选择器的问题),或者

area[name=part-1] menu

?

于 2013-07-10T13:25:07.487 回答