2009-03-11 11 views
1

Ich habe gegoogelt und so gesucht, aber ohne Erfolg (wahrscheinlich schlechte Suchfähigkeiten).Zeige nur eine Instanz einer Klasse mit jQuery

Mein Problem ist wahrscheinlich ziemlich einfach, ich möchte einfach das Mouseover-Ereignis zeigen nur die enthaltenen div (.action), wenn das Listenelement mit der Maus über (ui-state-default).

Hier ist das Markup

<ul id="column-2" class="connectedSortable"> 
    <li class="ui-state-default">feature 
     <div class="action"> 
      <img src="delete.png" class="delete" alt="Delete this Story"> 
      <br /> 
      <img src="duplicate.png" class="delete" alt="Duplicate this Story"> 
     </div> 
    </li> 
    <li class="ui-state-default">forward 
     <div class="action"> 
      <img src="delete.png" class="delete" alt="Delete this Story"> 
      <br /> 
      <img src="duplicate.png" class="delete" alt="Duplicate this Story"> 
     </div> 
    </li> 
</ul> 

Und das JavaScript

$(function() { 
    $(".ui-state-default").mouseenter(function(){ 
     $(".action").show(); 
    }).mouseleave(function(){ 
     $(".action").hide(); 
     }); 
}); 

Jetzt erkenne ich, dass dies jedes Vorkommen von .Action zeigen wird - aber wie kann ich sicherstellen, dass es zeigt es nur innerhalb es ist Elternteil li? Ich habe versucht, die jQuery Eltern/Kind-Argumente zu verwenden, aber kläglich gescheitert.

Jede Hilfe würde sehr geschätzt werden.

Antwort

3
$(function() { 
    $(".ui-state-default).mouseenter(function() { 
    $(this).find(".action").show(); 
    }).mouseleave(function() { 
    $(this).find(".action").hide(); 
    }); 
}); 

Oder benutzen Sie einfach den Hover() Ereignis:

$(function() { 
    $(".ui-state-default").hover(function() { 
    $(this).find(".action").show(); 
    }, function() { 
    $(this).find(".action").hide(); 
    }); 
}); 

Statt:

$(this).find(".action") 

können Sie auch tun:

$(this).children(".action") 

oder eine beliebige Anzahl anderer Möglichkeiten, es auszuwählen.

+0

damn! Ich dachte nie an find() überhaupt :(Vielen Dank Cletus – jakeisonline

+0

Ja jQuery ist ein lustiger. Es dauert eine Weile, um zu erkennen, was Sie mit den Werkzeugen tun können. Aber es lieben. :) – cletus

+0

In der Tat, die schiere Community-Support und umfangreiche Dokumentation/Blogs sind erstaunlich. Auch scheint Hover von etwas schneller verarbeitet als mouseenter/leave - interessant. – jakeisonline

3

Sie sollten ".Action" den aktuellen Kontext (die Liste Artikel, den Sie schweben) einschränken:

$(function(){ 
    $(".ui-state-default").hover(
    var listItem = this; 
    function(){ 
     $(".action", listItem).show();   
    } 
    , 
    function(){ 
     $(".action", listItem).hide();   
    } 
); 
}); 
+0

Danke SebaGR, aber Cletus war ein bisschen schneller;) + Stimme für eine andere richtige Antwort obwohl – jakeisonline

+0

Hehe froh, zu helfen, egal :) – Seb

Verwandte Themen