jQuery:通过.addClass()或.attr()在类更改后按类选择

前端之家收集整理的这篇文章主要介绍了jQuery:通过.addClass()或.attr()在类更改后按类选择前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些像这样的jQuery代码
$(document).ready(function() {
    $("img.off").click(function() {
        alert('on');
       $(this).attr('class','on'); 
    });
    $("img.on").click(function() {
        alert('off');
        $(this).attr('class','off'); 
    });
});

选择器适用于具有在原始HTML文档中定义的类名的图像,但是在使用jQuery操作类名后,img项不会响应使用它的新类的选择器.

换句话说,运行上面的代码,如果单击“关闭”img,它将触发第一个函数,并将类更改为“on”.但是,再次单击此图像不会触发第二个功能(正如我预期的那样),而是再次触发第一个功能.这就好像选择器正在读取旧DOM而不是更新版本.我在这做错了什么?

Firefox 3.6.3 – jQuery 1.4.2

解决方法

您可以使用 .live()来执行您想要的操作,如下所示:
$(function() {
  $("img.off").live('click',function() {
    alert('on');
    $(this).attr('class','on'); 
  });
  $("img.on").live('click',function() {
    alert('off');
    $(this).attr('class','off'); 
  });
});

当你执行$(selector).click()时,你会找到当时匹配的元素并将处理程序绑定到click事件……当它们的类稍后更改时,这对此无关紧要,处理程序已附加. .live()的工作方式不同,实际上关心事件发生时的选择器匹配.

此外,根据您的示例/您最终会追求的内容,像.toggleClass()这样的内容可能会为您简化,如下所示:

$(function() {
  $("img.off,img.on").live('click',function() {
    $(this).toggleClass('on off'); 
    alert($(this).attr('class'));
  });
});
原文链接:https://www.f2er.com/jquery/176977.html

猜你在找的jQuery相关文章