jQuery अगर DIV के पास "x" वर्ग नहीं है


211

JQuery में, मुझे यह देखने के लिए कि क्या इस वर्ग में '.selected' नहीं है, यदि कोई वक्तव्य देना है।

$(".thumbs").hover(function(){

$(this).stop().fadeTo("normal", 1.0);
},function(){
$(this).stop().fadeTo("slow", 0.3);

});

मूल रूप से जब यह फ़ंक्शन चलाया जाता है (होवर पर) मैं फ़ेड्स का प्रदर्शन नहीं करना चाहता हूं यदि वर्ग '.selected' को div में जोड़ दिया गया है, तो इसका मतलब यह होगा कि छवि पूरी तरह से अस्पष्ट है कि यह चयनित है। Google पर खोजा गया है कि कोई भाग्य नहीं है, भले ही यह एक IF स्टेटमेंट का उपयोग करने का सरल प्रश्न हो ...

जवाबों:


359

"नहीं " चयनकर्ता का उपयोग करें ।

उदाहरण के लिए, इसके बजाय:

$(".thumbs").hover()

प्रयत्न:

$(".thumbs:not(.selected)").hover()


इसके बारे में सोचते हुए, अगर ओपी किसी बिंदु पर div को वर्ग जोड़ रहा है दस्तावेज़ के बाद। पहले से ही तो मुझे नहीं लगता कि आपका वाक्यविन्यास काम करेगा
रस कैम

@ zuk1: ठीक है, अपने स्निपेट से, आप क्लास 'थंब' के साथ सभी तत्वों को लेते हैं और प्रत्येक पर एक होवर () करते हैं। क्या आप कह रहे हैं कि आप केवल एक तत्व पर मंडराना चाहते हैं? वह एक तत्व क्या है? मैं उलझन में हूं।
14

@ रुस: सही यदि आप उपरोक्त का उपयोग करते हैं, तो यह वर्तमान में निष्पादित होने वाले डोम में वर्तमान में सभी एलएमएस ले जाएगा, और उन लोगों के लिए जो 'अंगूठे' के साथ हैं और 'चयनित' नहीं हैं, यह हॉवर () करेंगे।
अल्फाजोग

यदि आपको किसी कारण से चयनकर्ता के बाहर ऐसा करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं .not( ".selected" )और यह उसी तरह काम करेगा। शानदार सामान।
जोशुआ पिंटर

180

jQuery में hasClass () फ़ंक्शन है जो लिपटे सेट में किसी भी तत्व को निर्दिष्ट वर्ग रखता है, तो यह सही है

if (!$(this).hasClass("selected")) {
    //do stuff
}

मेरे उपयोग के उदाहरण पर एक नज़र डालें

  • यदि आप एक div पर मंडराते हैं, तो यह सामान्य गति के रूप में 100% अस्पष्टता के रूप में बढ़ता है यदि div में 'चयनित' क्लास नहीं है
  • यदि आप एक डिव से बाहर निकलते हैं, तो यह धीमी गति से 30% अस्पष्टता से भरता है यदि डिव में 'चयनित' वर्ग नहीं है
  • बटन पर क्लिक करने से 'div' श्रेणी लाल 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>

संपादित करें:

यह सिर्फ एक अनुमान है, लेकिन क्या आप ऐसा कुछ हासिल करने की कोशिश कर रहे हैं ?

  • दोनों डिवीजन 30% अस्पष्टता से शुरू होते हैं
  • 100% अपारदर्शिता के लिए एक दिव्य कवच पर मँडराते हुए, 30% अपारदर्शिता पर वापस मँडरा जाता है। फीका प्रभाव केवल उन तत्वों पर काम करता है जिनके पास 'चयनित' वर्ग नहीं है
  • एक div क्लिक करने से 'चयनित' वर्ग जुड़ जाता है / निकल जाता है

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>

किसी कारण से काम नहीं करता है :( $ ("। अंगूठे")। होवर (फ़ंक्शन () {if ((($ (यह) .hasClass ("चयनित")) {$ (यह) .stop ()। fadeTo ("सामान्य", 1.0);}, फ़ंक्शन () {$ (यह) .stop ()। fadeTo ("धीमी", 0.3);}}); और यह मेरे पूरे कोड को तोड़ देता है, JS में से कोई भी काम नहीं करता है कहा कि
zuk1

करता है की आवश्यकता है? hasClass ('चयनित') के बजाय hasClass ('। चयनित')
bendewey

यदि आप ".selected" के बजाय "चयनित" का उपयोग करते हैं तो Russ का उदाहरण काम कर सकता है?
अल्फा

क्षमा याचना, का मतलब नहीं था। वहाँ पर। अभी अपडेट किया गया
कैम

मैंने अपने जवाब में कुछ उदाहरण जोड़ दिए हैं, कोड को दिखाने के लिए
Russ कैम

28

मुझे लगता है कि लेखक की तलाश थी:

$(this).not('.selected')

1
काम करने के लिए यह उम्मीद नहीं कर रहा था। यहां तक ​​कि $ ("क्लास 1") की तरह काम करता है। नहीं ("क्लास 2") जो कि वास्तव में मैं था उसके बाद! धन्यवाद!
kravits88

3
यह काम करता है, लेकिन यह ध्यान देने योग्य है कि यह बूलियन के रूप में काम नहीं करता है, क्योंकि यह एक सरणी देता है। जावास्क्रिप्ट में खाली सरणियाँ "सत्य" हैं। $(this).not('.selected').lengthयदि आप वास्तव में चाहते थे, तो आप बूलियन के रूप में उपयोग कर सकते हैं , लेकिन यह एक छोटी सी क्रिया है।
जो मैफेई

5

जब आप जाँच रहे हैं कि किसी तत्व के पास कक्षा है या नहीं है, तो सुनिश्चित करें कि आपने गलती से क्लास के नाम में डॉट नहीं लगाया है:

<div class="className"></div>

$('div').hasClass('className');
$('div').hasClass('.className'); #will not work!!!!

अपने कोड को घूरने के लंबे समय के बाद मुझे एहसास हुआ कि मैंने यह कर लिया है। इस तरह के एक छोटे टाइपो ने मुझे यह पता लगाने में एक घंटे का समय दिया कि मैंने क्या गलत किया है। अपना कोड जांचें!


1
$(".thumbs").hover(
    function(){
        if (!$(this).hasClass("selected")) {
            $(this).stop().fadeTo("normal", 1.0);
        }
    },
    function(){
        if (!$(this).hasClass("selected")) {
            $(this).stop().fadeTo("slow", 0.3); 
        }           
    }
);

होवर के प्रत्येक भाग के अंदर अगर डाल दिया जाए तो आप गतिशील रूप से चयनित वर्ग को बदल सकते हैं और हॉवर अभी भी काम करेगा।

$(".thumbs").click(function() {
    $(".thumbs").each(function () {
        if ($(this).hasClass("selected")) {
            $(this).removeClass("selected");
            $(this).hover();
        }
    });                 
    $(this).addClass("selected");                   
});

एक उदाहरण के रूप में मैंने क्लिक किए गए आइटम पर चयनित वर्ग को स्विच करने के लिए एक क्लिक हैंडलर भी संलग्न किया है। फिर मैं पिछले आइटम पर होवर ईवेंट को आग से मिटाने के लिए आग लगा देता हूं।


0

आप टैब जैसे आइटम के बीच टॉगल करने के लिए addClass और removeClass तरीकों का भी उपयोग कर सकते हैं।

जैसे

if($(element).hasClass("selected"))
   $(element).removeClass("selected");

सिर्फ टॉगलक्लास () का उपयोग क्यों न करें?
रस कैम

1
क्योंकि तत्व में अन्य वर्ग हो सकते हैं।
तिवानी

0

यदि किसी घटना के अंदर का उपयोग करने के बजाय, आप उस घटना को अनबाइंड करते हैं, जब चयनित वर्ग लागू होता है? मैं अनुमान लगा रहा हूं कि आप अपने कोड के अंदर कहीं और कक्षा जोड़ेंगे, इसलिए वहां होने वाली घटना को इस तरह से देखना:

$(element).addClass( 'selected' ).unbind( 'hover' );

केवल नकारात्मक पक्ष यह है कि यदि आप कभी भी चयनित वर्ग को तत्व से हटाते हैं, तो आपको इसे फिर से हॉवर ईवेंट की सदस्यता लेनी होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.