2016-08-17 9 views
7

Ich habe eine Funktion, die überprüft, ob ein img-Tag innerhalb einer Figur Element mit einer Klasse von "colorbox" ist, und wenn es ist, um einige Elemente zusätzlichen Styling hinzuzufügen. Die Funktion läuft jedoch auch dann, wenn in der Farbbox keine Bilder sind und ich weiß nicht warum.jQuery Erkennung nicht existierendes Element

Meine jQuery sieht aus wie dieses

jQuery(document).ready(function($){ 
    if ($(".colorbox").has("img")) { 
    ~code here~ 
    } 
} 

Und hier ist die colorbox Figur, klar ohne img Element ...

<figure class="colorbox"> 
    <ficaption> 
    <h2></h2> 
    <p></p> 
    <p></p> 
    </figcaption> 
</figure> 

Also warum sollte jQuery ein Element Kommissionierung werden die ‚doesn t existieren?

Antwort

4

ich es auf diese Weise tun würde lieber:

jQuery(document).ready(function($){ 
    $('.colorbox img').each(function(){ 
     var imageElement = $(this); 
     // do whatever you want with this element ! 
    }); 
    // OR this way 
    $('.colorbox').each(function(){ 
     var box = $(this); 
     if(box.find('img').length){ 
      // this means the parent colorBox has at least 1 img-Element 
     } 

    }); 
} 

und jetzt für Ihr Problem :

$(".colorbox").has("images"); 

$(".colorbox") gibt ein Liste von Elementen, falls vorhanden

dann fragen Sie, ob die Liste .has("img")? Dies bedeutet, wenn ein Element in der Liste ein img Element nach innen hat, dann bekommt man ein wahr als Ergebnis, dass if-Anweisung, deshalb Ihr Code als

+0

Danke für die Antwort, aber ironisch möchte ich jQuery auf * andere * Elemente anwenden, wenn es ein IMG-Tag gibt, nicht um das IMG selbst. –

+0

zu anderen Elementen? Welche Elemente? Innerhalb der each-Schleife können Sie Jquery auf alle anderen Elemente anwenden, nicht nur auf dieses Bild. –

+0

Ah, du hast recht. Es gelang mir, es herauszufinden, vielen Dank für die Hilfe. –

3

Gibt eine neue jquery-Untermenge zurück. Sie werden if($(".colorbox").has("img").length) möchten überprüfen, ob es irgendwelche img-Tags ist da drin

+0

[Docs erwartet funktioniert nicht ] (https://api.jquery.com/has/#has-contained), um es zu unterstützen: "Bei einem jQuery-Objekt, das eine Gruppe von DOM-Elementen darstellt, erstellt die .has() -Methode ein neues jQuery-Objekt aus einer Teilmenge Der angegebene Selektor wird auf die Nachkommen der übereinstimmenden Elemente getestet, und das Element wird in das Ergebnis einbezogen, wenn eines seiner untergeordneten Elemente mit dem Selektor übereinstimmt. " – user3366016

+0

Es scheint, dass die Verwendung der .length-Methode verhindert, dass die Funktion unter keinen Umständen funktioniert, daher wird die Funktion nicht ausgelöst, selbst wenn ein img-Tag vorhanden ist. –

+0

Hier ist ein Beispiel [jsfiddle] (http://jsfiddle.net/rxkbo9q3/4/), um zu zeigen, wie die Länge funktioniert und was $ (". Colorbox"). Hat ("img"). Länge Ausgaben und was $ (".colorbox"). hat ("img") Ausgänge. Hoffe es hilft den Unterschied zu zeigen. – user3366016

4

I find Funktion

var $img = $(".colorbox").find("img"); 

if ($img.length) { //exisst 

}