addClass / removeClass基于所选项目数据属性

时间:2016-01-15 13:24:27

标签: javascript jquery html attributes removeclass

我有点卡在这里。我有一个ul链接菜单。当用户从此列表中选择时,我正在使用ajax从另一个页面调用内容。我想从所选锚点中获取数据属性(data-flag),并将该属性作为类添加到包含ajax内容(#fourteen)的div中。添加类件工作正常。但是,当从ul菜单中选择一个新项目时,我似乎无法从内容div中删除其他类。每次单击,它只会添加更多类。

这是我的代码。

<ul id="langtest" class="tp_lang2">
 <li><a href="http://myurl.com/14-languages" data-flag="us" data-lang="English">English</a></li>
 <li><a href="http://myurl.com/zh/14-languages" data-flag="cn" data-lang="Chinese (Simplified)">中文(简体)</a></li>
 <li><a href="http://myurl.com/nl/14-languages" data-flag="nl" data-lang="Dutch">Nederlands</a></li>
 <li><a href="http://myurl.com/fr/14-languages" data-flag="fr" data-lang="French">Français</a></li>
</ul>

<div id="fourteen" class="cn">
 <div id="content">
  <div class="main-content">Content being served up here.
  </div>
 </div>
</div>

    <script>

     jQuery("ul#langtest li a").click(function() {

        jQuery('#fourteen').load($(this).attr("href") + " #content");
        jQuery('#fourteen').removeClass.not(this).attr("data-flag");
        jQuery('#fourteen').addClass($(this).attr("data-flag"));
        return false;
        });

    </script>

3 个答案:

答案 0 :(得分:1)

在动态添加的元素上,您必须使用delegate event绑定。

jQuery(document).on("click","ul#langtest li a",function() {

    jQuery('#fourteen').load($(this).attr("href") + " #content");
    //also change your removeClass code
    jQuery('#fourteen').removeClass();
    jQuery('#fourteen').addClass($(this).attr("data-flag"));
    return false;
    });

答案 1 :(得分:1)

您只需删除元素中的所有类,如下所示:

// remove all class
jQuery('#fourteen').removeClass();
// then add class name with data flag selected anchor only
jQuery('#fourteen').addClass($(this).attr("data-flag"));

DEMO检查元素以查看实际添加和删除的类

答案 2 :(得分:1)

您的removeClass似乎并不完美。就像下面这样。

jQuery('#fourteen').removeClass();