0

这是一个新问题,来自刚刚在此处回答的另一个问题。

我正在努力突出<div>基于搜索文本的内容。感谢 Alex,我们已经做到了。

现在,我正在尝试将相同的概念应用于图像地图上的映射坐标。

这里有一个jsfiddle 。

这是 JS(jQuery 1.10.2)...

function doSearch(text) {
    $('#content div').removeClass('highlight');
    $('#content div:contains(' + text + ')').addClass('highlight');
}
4

2 回答 2

0

图像映射和区域元素是不可能的,因为它们是不可见的元素,不能有子元素,也不能有样式。您将不得不像这里描述的那样做更复杂的事情

但是使用现代嵌入式 SVG是可能的——现在几乎每个浏览器都支持它。甚至 IE。

我用 Chromium 和 Firefox 对其进行了测试。

据我所知,它不能在 jQuery 的帮助下完成,而是使用通常的 Javascript。关键是:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="663px" height="663px">
        <image xlink:href="http://webfro.gs/south/kb2/images/bunny.jpg" x="0" y="0" width="663" height="663" />
        <circle class="office" cx="504" cy="124" r="94" />
        <circle class="fire-exit" cx="168" cy="150" r="97" />
        <circle class="main-exit" cx="378" cy="589" r="48" />
</svg>

_

var svgns="http://www.w3.org/2000/svg";
var areas = document.getElementsByTagNameNS(svgns, 'circle');
$(areas).each(function(elem) {
    if(areas[elem].className.baseVal === text) {
        areas[elem].className.baseVal += ' highlightsvg';
    } else {
        areas[elem].className.baseVal = areas[elem].className.baseVal.replace(' highlightsvg', '');
    }

});

请参阅JSFiddle 中的此处。这是你想要的方式吗?

于 2013-08-28T23:00:31.800 回答
0

如果你想要一个没有 SVG 的方法,你可以使用Maphilight jQuery 插件 ( GitHub )。

我已经更新了你的jsFiddle

function doSearch(text) {
    $('#content div').removeClass('highlight');
    $('#content div:contains(' + text + ')').addClass('highlight');

    $('#Map area').mouseout(); 
    $('#Map area[data-text*="' + text + '"]').mouseover(); 
}
$(function() {
    $('#imgmap').maphilight({ stroke: false, fillColor: "ffff00", fillOpacity: 0.6 });
});

注意:为了获得更好的结果,只需使用更大的图像,因为您的bunny.jpg太小,并且您已使用高度/宽度属性强制其大小。

于 2013-08-28T23:35:04.667 回答