2009-08-02 19 views
0
Navigation

Ich habe den folgenden Code mehrmals auf einer HTML-Seite (Textwerte unterscheiden) mit:Ärger das DOM in jQuery

<div> 
<a href="1.html"> 
    <span class="e"> 
    <span class="1">stuff1</span> 
    <span class="2">stuff2</span> 
    <span class="3">stuff3</span> 
    </span> 
</a> 
<a class="click" href="2.html">link</a> 
</div> 

, was ich versuche zu tun ist, wenn der Link „link“ geklickt wird , erzeuge einen Dialog mit Werten von stuff1, stuff2 und stuff3. Ich habe Schwierigkeiten, die Werte der Spannweiten zu erreichen. Effektiv, was ich will, ist, $ (this) zu nehmen und den Text von seinem sibbling's nur zu bekommen, spanne Kinderspankinder.

Danke! MALA

Antwort

3

Ich bin ein wenig Mühe, herauszufinden, was du meinst, aber vielleicht ist es:

$('.click').click(function() { 
    // using our parent as a base, look for any class='e' element, and get its children. 
    var $collection = $('.e > *', $(this).parent()); 
    var text = []; 
    $collection.each(function() { 
    // add the text within each span to an array 
    text.push($(this).text()); 
    }); 

    // show the text of the spans as a comma separated list 
    alert(text.join(', ')); 


}); 

Die .text() Funktion auf einem jQuery-Objekt wird wieder den Text innerhalb eines span (oder irgendein anderes Element).

Antwort auf Kommentar:

$('.e span', $(this).parent()) würde auch funktionieren, .e > * alle DIRECT Kinder eines class='e' Element auswählt. Das zweite Argument der $ -Funktion funktioniert als ein Bereich; Es findet nur Elemente unter diesem Basiselement.

Es könnte auch $(this).parent().find('span span') geschrieben werden. Die Gefahr, nur nach "span" zu suchen, ist, dass es auch mit der äußeren Spanne übereinstimmt - die äußere Spanne $('.e', $(this).parent()).text() gibt den Text aller 3 Elemente zusammen zurück - was tatsächlich sein kann, was Sie wollen.

+0

danke für Ihre Antwort! Das Problem ist, dass es mehrmals auf der Seite erscheint, und ich möchte nur, dass es im div des angeklickten Links passiert, also muss es irgendwie das $ (this) des Mausclicks einarbeiten und relativ von dort weg bewegen ... – Mala

+0

Habe gerade diese Einschränkung beim erneuten Lesen bemerkt; hat $ (this) .parent() zum ursprünglichen Selektor hinzugefügt, um nur innerhalb des Elternteils zu suchen, oder Sie könnten $ (this) .prev(); um den vorherigen Sibiling zu bekommen. – gnarf

+0

Danke! Versuchen Sie es jetzt ... – Mala

1
$(this).prev().children(".e").get(0).children() 

erhalten Sie alle Kinder des ersten Kindes des vorherigen Kindes der Klasse "e".

Sie könnten dies auch ohne jQuery tun, aber es ist ein bisschen hässlicher; Wenn Sie einen Verweis auf den Knoten haben, an dem Sie interessiert sind, suchen Sie nach dessen .previousSibling.getElementsByTagName('span')[0].childNodes - einem Array.