首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种更聪明的方式来做这件事,jQuery?

一种更聪明的方式来做这件事,jQuery?
EN

Stack Overflow用户
提问于 2012-06-07 18:33:22
回答 3查看 1.3K关注 0票数 1

我在我的网站上有一个地图,点击区域一个类应该被切换,在悬停和点击时,我已经做了一个jQuery解决方案来做这件事,然而,我认为它可以比我做的更聪明吗?我的HTML输出是这样的:

代码语言:javascript
复制
<div class="mapdk">
                <a data-class="nordjylland" class="nordjylland" href="#"><span>Nordjylland</span></a>
                <a data-class="midtjylland" class="midtjylland" href="#"><span>Midtjylland</span></a>
                <a data-class="syddanmark" class="syddanmark" href="#"><span>Syddanmark</span></a>
                <a data-class="sjaelland" class="sjalland" href="#"><span>Sjælland</span></a>
                <a data-class="hovedstaden" class="hovedstaden" href="#"><span>Hovedstaden</span></a>
            </div>

我的jQuery看起来像这样:

代码语言:javascript
复制
if ($jq(".area .mapdk").length) {
    $jq(".mapdk a.nordjylland").hover(function () {
        $jq(".mapdk").toggleClass("nordjylland");
    }).click(function () {
        $jq(".mapdk").toggleClass("nordjylland");
    });
    $jq(".mapdk a.midtjylland").hover(function () {
        $jq(".mapdk").toggleClass("midtjylland");
    }).click(function () {
        $jq(".mapdk").toggleClass("midtjylland");
    });
}

问题是,在我所做的事情中,我必须为我得到的每个链接创建一个悬停和单击函数-我在想我可以将它保持在一个悬停状态,单击函数,然后使用$jq(这)之类的东西?但是不确定是怎么做的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-07 18:38:37

使用此选择器

代码语言:javascript
复制
if ($jq(".area .mapdk").length) {
    $jq(".mapdk a").hover(function () {
        $jq(".mapdk").toggleClass($jq(this).attr("class"));
    }).click(function () {
        $jq(".mapdk").toggleClass($jq(this).attr("class"));
    });

}
票数 0
EN

Stack Overflow用户

发布于 2012-06-07 18:37:06

您需要使用$jq(this)$jq(this)指的是称为事件侦听器的元素。

例如:

代码语言:javascript
复制
$jq(".mapdk a").hover(function () {
        $jq(this).parents(".mapdk").toggleClass($jq(this).data("class"));
    }).click(function () {
        $jq(this).parents(".mapdk").toggleClass($jq(this).data("class"));
    });

要分解它,请执行以下操作:

  • $jq(this)调用悬停的元素(即.锚element).
  • .parents(".mapdk")查找具有类.mapdk
  • $jq(this).data("class")的第一个父类,并从锚元素

中获取data-class的值

票数 1
EN

Stack Overflow用户

发布于 2012-06-07 18:41:53

您可以使用jQuery的each函数来迭代.mapdk中的所有锚标记

免责声明我假设你只希望设置父.mapdk的类。如果你有多个类(不是锚的父类),那么下面的代码将不会作为你的代码工作,但我假设你不会想要为所有的.mapdk设置类,无论你悬停/点击哪个锚。

代码语言:javascript
复制
//Since the function is the same for all event handlers let's just declare that once
var handler = function () {
        var $this = $jq(this);
        $this.parents(".mapdk").toggleClass($this.attr("class"));
};
//find all the anchor tags within .mapdk that has a class specified
$jq(".mapdk a[class]").each(function{
    this.hover(handler).click(handler);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10930074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档