Jak wybrać pierwszy, drugi lub trzeci element o podanej nazwie klasy?
Jak mogę wybrać określony element na liście elementów? Mam następujące:
<div class="myclass">my text1</div>
<!-- some other code follows -->
<div>
<p>stuff</p>
</div>
<div>
<p>more stuff</p>
</div>
<p>
<span>Hello World</span>
</p>
<div class="myclass">my text2</div>
<!-- some other code follows -->
<div>
<p>stuff</p>
</div>
<p>
<span>Hello World</span>
</p>
<input type=""/>
<div class="myclass">my text3</div>
<!-- some other code follows -->
<div>
<p>stuff</p>
</div>
<footer>The end</footer>
Mam klasę CSS div.myclass {doing things}
, która dotyczy oczywiście wszystkich, ale chciałem również móc wybrać pierwszy, drugi lub trzeci div klasy .myclass
w ten sposób, niezależnie od tego, gdzie są w znacznikach :
div.myclass:first {color:#000;}
div.myclass:second {color:#FFF;}
div.myclass:third {color:#006;}
Prawie jak wybór indeksu jQuery .eq( index )
, którego obecnie używam, ale potrzebuję alternatywy bez skryptów.
Mówiąc konkretnie, Szukam pseudo selektory, a nie rzeczy takie jak dodawanie innej klasy lub używanie ID do działania.
5 answers
Prawdopodobnie w końcu zdałeś sobie z tego sprawę między opublikowaniem tego pytania a dniem dzisiejszym, ale sama natura selektorów uniemożliwia poruszanie się po hierarchicznie niepowiązanych elementach HTML.
Lub, mówiąc prościej, skoro w swoim komentarzu powiedziałeś, że
Nie ma jednorodnych pojemników macierzystych
... po prostu nie jest to możliwe z samymi selektorami, bez modyfikowania znaczników w jakiś sposób, jak pokazują inne odpowiedzi.
You have to użyj rozwiązania jQuery .eq()
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-28 21:59:46
Użyj NTH-child(numer pozycji) EX
<div class="parent_class">
<div class="myclass">my text1</div>
some other code+containers...
<div class="myclass">my text2</div>
some other code+containers...
<div class="myclass">my text3</div>
some other code+containers...
</div>
.parent_class:nth-child(1) { };
.parent_class:nth-child(2) { };
.parent_class:nth-child(3) { };
Lub
: nth-of-type(numer pozycji) ten sam Twój kod
.myclass:nth-of-type(1) { };
.myclass:nth-of-type(2) { };
.myclass:nth-of-type(3) { };
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-14 13:09:01
Tak, możesz to zrobić. Na przykład, aby stylizować znaczniki td składające się na różne kolumny tabeli, możesz zrobić coś takiego:
table.myClass tr > td:first-child /* First column */
{
/* some style here */
}
table.myClass tr > td:first-child+td /* Second column */
{
/* some style here */
}
table.myClass tr > td:first-child+td+td /* Third column */
{
/* some style here */
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-28 21:55:03
To nie tyle odpowiedź, co Brak odpowiedzi, czyli przykład pokazujący, dlaczego jedna z wysoko głosowanych odpowiedzi powyżej jest w rzeczywistości błędna.
Myślałem, że ta odpowiedź wygląda dobrze. W rzeczywistości dało mi to, czego szukałem: :nth-of-type
co, jak na moją sytuację, zadziałało. (Tak, dzięki za to, @ Bdvey.)
Początkowo przeczytałem komentarz @BoltClock (który mówi, że odpowiedź jest zasadniczo błędna) i odrzuciłem go, ponieważ sprawdziłem mój przypadek użycia i zadziałało. Wtedy zdałem sobie sprawę, @BoltClock miał reputację 300.000+(!) i ma profil, w którym twierdzi, że jest guru CSS. Pomyślałem, że może powinienem przyjrzeć się bliżej.
Okazuje się, że: div.myclass:nth-of-type(2)
nie oznacza " drugiej instancji div.myclass". Oznacza raczej "2. instancję div I musi mieć również klasę' myclass'". To ważne rozróżnienie, gdy pomiędzy twoimi instancjami są interwencje div
.
h1
, h2
, h3
na niektórych z nich umieściłem klasę A
, pogrupowałem je w 3, a następnie pokolorowałem 1., 2. i 3. instancje niebieskim, pomarańczowym i zielonym używając h?.A:nth-of-type(?)
. (Ale, jeśli czytasz uważnie, powinieneś zapytać " 1., 2. i 3. instancje czego?"). Wtrąciłem też różny (tj. inny poziom h
) lub podobny (tj. ten sam poziom h
) element nieklasyfikowany do niektórych grup.
Uwaga, w szczególności, ostatnia grupa 3. W tym przypadku element h3
jest wstawiany pomiędzy pierwszy i drugi h3.A
. W tym przypadku nie pojawia się drugi kolor (tj. pomarańczowy), a trzeci kolor (tj. zielony) pojawia się na drugim wystąpieniu h3.A
. To pokazuje, że n
w h3.A:nth-of-type(n)
liczy h3
s, a nie h3.A
s.
Cóż, mam nadzieję, że pomaga. I dzięki, @ BoltClock.
div {
margin-bottom: 2em;
border: red solid 1px;
background-color: lightyellow;
}
h1,
h2,
h3,
h4 {
font-size: 12pt;
margin: 5px;
}
h1.A:nth-of-type(1),
h2.A:nth-of-type(1),
h3.A:nth-of-type(1) {
background-color: cyan;
}
h1.A:nth-of-type(2),
h2.A:nth-of-type(2),
h3.A:nth-of-type(2) {
background-color: orange;
}
h1.A:nth-of-type(3),
h2.A:nth-of-type(3),
h3.A:nth-of-type(3) {
background-color: lightgreen;
}
<div>
<h1 class="A">h1.A #1</h1>
<h1 class="A">h1.A #2</h1>
<h1 class="A">h1.A #3</h1>
</div>
<div>
<h2 class="A">h2.A #1</h2>
<h4>this intervening element is a different type, i.e. h4 not h2</h4>
<h2 class="A">h2.A #2</h2>
<h2 class="A">h2.A #3</h2>
</div>
<div>
<h3 class="A">h3.A #1</h3>
<h3>this intervening element is the same type, i.e. h3, but has no class</h3>
<h3 class="A">h3.A #2</h3>
<h3 class="A">h3.A #3</h3>
</div>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:37
Być może używając selektora " ~ " CSS?
.myclass {
background: red;
}
.myclass~.myclass {
background: yellow;
}
.myclass~.myclass~.myclass {
background: green;
}
Zobacz mój przykład na jsfiddle
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-15 21:19:39