Wie wähle ich das innerste Element aus?

8

Wie würde ich in jQuery so weit wie möglich in den HTML-Baum absteigen?

Der Einfachheit halber habe ich nur einen Weg nach unten.

(verwandt, aber Bonus: Wie finde ich das tiefste Element mit mehreren Abwärtspfaden?)

%Vor%

Ich möchte das innerste HTML der Zelle mit dem Namen cell0 ändern, aber ich kenne nicht unbedingt die Namen aller darin enthaltenen Klassen. Ist es möglich, so weit zu wählen, ohne diese Namen zu kennen?

Vielen Dank!

    
sova 15.11.2010, 21:21
quelle

9 Antworten

24

Suchen Sie für einzelne Pfade einfach das Element, das keine untergeordneten Knoten hat:

%Vor%

Oder in Ihrem speziellen Fall $('#cell0 *:not(:has("*"))');

Für mehrere Pfade - was ist, wenn mehrere gleich verschachtelte Knoten vorhanden sind? Diese Lösung wird Ihnen ein Array aller Knoten mit der höchsten Anzahl von Vorfahren geben.

%Vor%

Auch in Ihrer Situation möchten Sie wahrscheinlich zu den tiefsten Elementen der Tabellenzellen gelangen, also sind Sie wieder bei einem Einzeiler:

%Vor%

- Dies wird ein jQuery-Objekt zurückgeben, das alle innersten Kindknoten jeder Zelle in Ihrer Tabelle enthält.

    
pawel 15.11.2010, 22:06
quelle
3

Ich würde dies durch eine einzelne rekursive Funktion tun:

%Vor%     
Jacob 15.11.2010 21:34
quelle
1

Nun, ausgehend von einer Grundlage, dass Sie keine Ahnung haben, wo dieser "tiefste" Knoten ist, könnten Sie so etwas tun:

%Vor%

Dann

%Vor%

wäre (mit Ausnahme der 12 Bugs wahrscheinlich in meinem Code) ein jQuery-Objekt für die Menge der tiefsten Elemente.

edit - Eines meiner Dutzend Bugs ist, dass dies die Tiefe der Startknoten nicht berücksichtigt - das wäre ein Trick, um es herauszufinden. Es könnte besser sein, es so umzubauen, dass es die tiefste der ursprünglich ausgewählten Liste findet:

%Vor%

und um die tiefste auf der Seite zu bekommen, die Sie tun würden:

%Vor%     
Pointy 15.11.2010 21:30
quelle
1

Mit einem einzelnen Pfad:

%Vor%

Wenn ich Zeit bekomme, werde ich meine Antwort mit dem Code für mehrere Pfade aktualisieren.

    
casablanca 15.11.2010 21:31
quelle
0

Als Erstes würde ich eine Tiefensuche (DFS) durchführen und verfolgen, auf welcher Ebene Ich war für jeden Knoten im DOM.

Um zu vermeiden, dass jedes Mal ein vollständiges DFS ausgeführt werden muss, wenn Sie etwas ändern möchten (vorausgesetzt, Sie möchten es mehrmals tun), könnten Sie jeden DOM-Knoten mit seiner Ebene in der Struktur markieren, während die Suche ausgeführt wird . (Andererseits könnten Sie dieses Level-Tagging möglicherweise während der Generierung der Tabelle durchführen?) Sobald die Suche abgeschlossen ist und Sie den tiefsten Knoten ermittelt haben, behalten Sie einen Verweis auf diesen Knoten.

Von diesem Punkt an sollten Sie in der Lage sein, schnell zu aktualisieren, welcher Knoten sich zu einem bestimmten Zeitpunkt auf der tiefsten Ebene befindet.

    
Brendan 15.11.2010 21:34
quelle
0

Vielleicht nicht die effizienteste, aber Sie könnten dies tun:

Beispiel: Ссылка

%Vor%

oder das:

Beispiel: Ссылка

(Die Ergebnisse im Beispiel scheinen auf verschiedenen Ebenen zu liegen, aber dies liegt daran, dass der Browser das fehlende <tbody> einfügt.)

%Vor%     
user113716 15.11.2010 21:32
quelle
0

Es ist nicht jQuery-spezifisch, aber diese rekursive Lösung kann optimiert werden, um zu tun, was immer Sie wollen.

%Vor%     
rob 15.11.2010 21:33
quelle
0

Ich denke, das ist die kürzeste Probe für Sie:

%Vor%

Es ist wirklich innerste Element ändern, und Speichern von Tags Struktur

    
Argimko 21.03.2016 02:27
quelle
0

Sehr spät zur Party, aber hier ist meine generische Lösung.

%Vor%

Es ist sehr schnell und einfach, weil jQuery bereits alle Aufgaben für uns erledigt.

Beachten Sie, dass elements$ eine geordnete Liste von Containern ist, von denen viele das nächste enthalten. Somit sind die innersten Elemente das letzte Element plus alle Elemente, die das nächste Element nicht enthalten.

    
Ando 30.07.2017 21:05
quelle

Tags und Links