Wie wählt man alle Elemente zwischen zwei Elementen aus?

8

Wenn ich diesen HTML-Code habe, wie kann ich alle Elemente zwischen #one und #two auswählen? mit CSS? Ich kann jQuery nicht verwenden.

%Vor%     
Harmstra 03.03.2017, 09:31
quelle

3 Antworten

7

Der ~ allgemeine Geschwisterkombinator ist, was Sie suchen

%Vor%

Was der obige Selektor tut, ist also, alle p -Elemente auszuwählen, die neben #one bis #two liegen. Später benutze ich :not() pseudo, um die letzte p auszuschließen:

%Vor% %Vor%

JSFiddle

    
Mr. Alien 03.03.2017 09:34
quelle
3

Sie können die Elemente in ein div-Element einschließen und die div-ID zuweisen, die Sie dann in der CSS-Datei verwenden, um auszuwählen, was sich innerhalb des Tags befindet.

%Vor%

%Vor% %Vor%
    
ronce96 03.03.2017 09:36
quelle
2

Wenn zwei Elemente Geschwister sind (dh dasselbe Elternelement haben), ist es in Selektoren 3 nicht möglich, einen Selektor zu schreiben, der Elementen zwischen ihnen entspricht, wenn die Struktur der Elemente nicht bekannt ist (oder wenn bekannt ist, dass sie sich ändert). .

In Selektoren 3 können Sie nur die Elemente zwischen ihnen zuordnen, wenn einer oder beide der folgenden Werte zutreffen:

  1. Die Baumposition der beiden Elemente relativ zu ihrem übergeordneten Element ist bekannt.

    Wenn beispielsweise #one immer das erste untergeordnete Element ist und #two immer das letzte untergeordnete Element ist, ist dies ganz einfach:

    %Vor%

    oder

    %Vor%

    (Beachten Sie, dass ich :not(:first-child) nicht einbeziehe, weil der ~ -Kombinator bereits sicherstellt, dass das erste übereinstimmende Element niemals das erste Kind ist - Sie möchten es vielleicht für die zusätzliche Spezifität oder sogar nur für das Klarheit.)

    Wenn #one immer das zweite Kind und #two immer das fünfte Kind ist:

    %Vor%

    Wenn #one immer das zweite Kind und #two immer das drittletzte Kind ist:

    %Vor%
  2. Die Anzahl der übereinstimmenden Elemente ist bekannt.

    Beachten Sie, dass wenn # 1 wahr ist, sollten Sie die in # 1 beschriebenen Techniken verwenden, nicht hier. Die folgende Technik ist extrem langwierig und soll als letzter Ausweg dienen, wenn # 1 nicht wahr ist.

    Wenn es immer nur n -Elemente zwischen #one und #two gibt, müssen Sie eine Liste von Selektoren erstellen, die mit #one beginnen und jedem nachfolgenden Selektor + p hinzufügen bis zu n mal.

    Zum Beispiel, wenn es immer nur drei p -Elemente zwischen #one und #two geben wird:

    %Vor%

Wenn in Selektoren 4 #one und #two wie in einem übereinstimmenden Dokument eindeutig sind, sind die folgenden Selektoren robust (dh sie funktionieren für jede Struktur von Elementen, , auch wenn bekannt ist, dass sie ):

%Vor%

oder

%Vor%

Verwenden Sie :has() in jQuery und anderen Nicht-CSS-Kontexten, in denen es unterstützt wird, und :not() in CSS (wobei :has() mit dem ~ -Kombinator voraussichtlich nicht unterstützt wird). Letztere funktioniert in Safari ; Es ist noch nicht bekannt, wann es in anderen Browsern geliefert wird.

    
BoltClock 04.03.2017 06:30
quelle

Tags und Links