jQuery如果DIV没有类“x”
在jQuery中,我需要做一个if语句来查看$ this是否不包含类“.selected”。
$(".thumbs").hover(function(){ $(this).stop().fadeTo("normal", 1.0); },function(){ $(this).stop().fadeTo("slow", 0.3); });
基本上,当这个函数运行(hover)时,如果类“.selected”已经附加到div,我不想执行淡入淡出,这将意味着图像将完全不透明,表示它被选中。 在Google上search不到运气,即使这是一个如何使用IF语句的简单问题…
使用“不 ”select器。
例如,而不是:
$(".thumbs").hover()
尝试:
$(".thumbs:not(.selected)").hover()
jQuery hasClass()函数返回true,如果包装集中的任何元素包含指定的类
if (!$(this).hasClass("selected")) { //do stuff }
看看我的使用例子
- 如果您将光标hover在div上,则如果div不包含“selected”类,则会将其作为正常速度淡化为100%不透明度
- 如果您hover在一个div上,如果div不包含“selected”类,则它会以低速缓慢降至30%不透明度
- 单击该button将“选定”类添加到红色的div。 褪色效果不再适用于红色的div
这是它的代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script> <title>Sandbox</title> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <style type="text/css" media="screen"> body { background-color: #FFF; font: 16px Helvetica, Arial; color: #000; } </style> <!-- jQuery code here --> <script type="text/javascript"> $(function() { $('#myButton').click(function(e) { $('#div2').addClass('selected'); }); $('.thumbs').bind('click',function(e) { alert('You clicked ' + e.target.id ); } ); $('.thumbs').hover(fadeItIn, fadeItOut); }); function fadeItIn(e) { if (!$(e.target).hasClass('selected')) { $(e.target).fadeTo('normal', 1.0); } } function fadeItOut(e) { if (!$(e.target).hasClass('selected')) { $(e.target).fadeTo('slow', 0.3); } } </script> </head> <body> <div id="div1" class="thumbs" style=" background-color: #0f0; margin: 10px; padding: 10px; width: 100px; height: 50px; clear: both;"> One div with a thumbs class </div> <div id="div2" class="thumbs" style=" background-color: #f00; margin: 10px; padding: 10px; width: 100px; height: 50px; clear: both;"> Another one with a thumbs class </div> <input type="button" id="myButton" value="add 'selected' class to red div" /> </body> </html>
编辑:
这只是一个猜测,但你是否想要实现这样的事情 ?
- 两个div开始在30%的不透明度
- 徘徊在一个分区褪色到100%的不透明度,徘徊退色到30%的不透明度。 淡入淡出效果仅适用于没有“选定”类的元素
- 点击div添加/删除“select”类
jQuery代码在这里 –
$(function() { $('.thumbs').bind('click',function(e) { $(e.target).toggleClass('selected'); } ); $('.thumbs').hover(fadeItIn, fadeItOut); $('.thumbs').css('opacity', 0.3); }); function fadeItIn(e) { if (!$(e.target).hasClass('selected')) { $(e.target).fadeTo('normal', 1.0); } } function fadeItOut(e) { if (!$(e.target).hasClass('selected')) { $(e.target).fadeTo('slow', 0.3); } } <div id="div1" class="thumbs" style=" background-color: #0f0; margin: 10px; padding: 10px; width: 100px; height: 50px; clear: both; cursor:pointer;"> One div with a thumbs class </div> <div id="div2" class="thumbs" style=" background-color: #f00; margin: 10px; padding: 10px; width: 100px; height: 50px; clear: both; cursor:pointer;"> Another one with a thumbs class </div>
我认为作者正在寻找:
$(this).not('.selected')
当你检查一个元素是否有class级时,确保你没有在class级名称中不小心加上一个点:
<div class="className"></div> $('div').hasClass('className'); $('div').hasClass('.className'); #will not work!!!!
经过很长时间的盯着我的代码,我意识到我已经做到了。 像这样的一个错字花了我一个小时,弄清楚我做错了什么。 检查你的代码!
$(".thumbs").hover( function(){ if (!$(this).hasClass("selected")) { $(this).stop().fadeTo("normal", 1.0); } }, function(){ if (!$(this).hasClass("selected")) { $(this).stop().fadeTo("slow", 0.3); } } );
把一个如果在hover的每个部分的内部将允许你dynamic地改变select类,hover将仍然工作。
$(".thumbs").click(function() { $(".thumbs").each(function () { if ($(this).hasClass("selected")) { $(this).removeClass("selected"); $(this).hover(); } }); $(this).addClass("selected"); });
作为一个例子,我还附加了一个点击处理程序,将选定的类切换到点击的项目。 然后,我将上一个项目上的hover事件触发,使其淡出。
您也可以使用addClass和removeClass方法在各个选项卡之间切换。
例如
if($(element).hasClass("selected")) $(element).removeClass("selected");
如果不是在事件内部使用if,而是在应用select类时解除绑定事件? 我猜你在你的代码里添加了这个类,所以在这里解除事件会看起来像这样:
$(element).addClass( 'selected' ).unbind( 'hover' );
唯一的缺点是,如果您从元素中删除选定的类,则必须再次将其订阅到hover事件。