2011-01-12 15 views

Antwort

5

Wenn Sie wirklich die 10. Eltern bekommen müssen, und Sie sind nicht in der Lage einen Selektor zu verwenden, um dorthin zu gelangen, die glatte Art und Weise wahrscheinlich so etwas wie dies wäre:

$('#element_id').parents().eq(9); 
15

Wenn es einen Selektor, der das Ziel Sie nach, dann .closest() oder .parents() verwenden darstellt.

$('#element_id').closest('.someClass'); 
$('#element_id').parents('.someClass:first'); 

... aber beide werden das erste gefundene Match zurückgeben. Die richtige Lösung hängt von Ihrem tatsächlichen HTML-Markup ab.

(Beachten Sie, dass .closest() auch das ursprüngliche Element auswertet, während parents() beginnt mit dem ersten Vorfahren.)

Denken Sie auch daran, dass Browser HTML Korrekturen vorzunehmen. Wenn Sie also von innerhalb eines <table>, der kein <tbody> hat, zu einem Element außerhalb des <table> übergehen, kann die Ausführung der x-Nummer .parent() zu unterschiedlichen Ergebnissen in verschiedenen Browsern führen.

+6

Dies ist der Weg, es zu tun. Parent() zehn Mal erfordert zu viel Wissen über die DOM-Struktur, die sich ändern könnte. Das Anwenden einer Klasse auf den Knoten, nach dem Sie suchen, ist viel sicherer. –

+0

Danke, das ist wirklich toll, beantwortet aber die Frage nicht so wie es ist. Was ist, wenn dieses 10. Elternteil keine Klasse oder ID hat? –

+0

@Silver Light: Sie würden '.parents()' immer noch mit einem Selektor verwenden. Gib ihm einen Selektor, der sagt * "gib mir das 10. Spiel" *. So: '$ ('# element_id'). Eltern (': eq (9)')'. – user113716

6

Der folgende Beitrag here verwendet diese Implementierung:

jQuery.fn.getParent = function(num) { 
    var last = this[0]; 
    for (var i = 0; i < num; i++) { 
     if(!last) break; 
     last = last.parentNode; 
    } 
    return jQuery(last); 
}; 
// usage: 
$('#myElement').getParent(3); 

so würde Ihre Nutzung einfach sein:

var position = $("#test").parents("div").length - 10; 
$("#test").closest("div:eq(" + position + ")").append("here!!!"); 

mit diesem HTML:

$('#element_id').getParent(10); 
+1

Dies führt zu Fehlern, wenn ein Element weniger als 'num'-Vorfahren hat. – lonesomeday

+0

Sie sollten die Schleife unterbrechen, wenn in der vorherigen Iteration kein Elternknoten vorhanden ist. 'wenn (! last) Pause; last = last.parentNode; '(wie @lonesomeday oben notiert) – user113716

+0

@lonesomeday, Guter Punkt. Ich dachte nur, es könnte nützlich sein, OP oder andere. –

0

ich diesen Code verwendet haben :

<div> 
     <div> 
      <div> 
       <div> 
        <div> 
         <div> 
          <div> 
           <div> 
            <div> 
             <div> 
              <div> 
               <span id="test">here</span> 
              </div> 
             </div>  
            </div> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 

Ja, das ist 11 Div. also sollte der Code beim 10. div anhalten und hier anhängen !!!

Ich bin sicher, dass dieser Code noch sauberer sein könnte.

Keine Notwendigkeit, Klasse hinzuzufügen.

Edit: Ich habe 11 DIV verwendet, so dass Sie sehen können, es geht nicht zum allerersten, es tatsächlich zu stoppen am 10..