2016-05-19 10 views
1

Wie kann ich mithilfe von CSS zwischen einem Tag unterscheiden, dessen leeres Elternelement leer wäre, wenn es und sein Inhalt gelöscht würden? Ich möchte es eigentlich nicht löschen, ich möchte es nur anders behandeln.Wie wähle ich ein Tag mit Text zwischen dem Tag und dem übergeordneten Tag aus?

Zum Beispiel mit dem folgenden Beispielcode:

<div><a>test one</a></div> 
<div>My <a>test two</a></div> 
<div>My <a>test three</a> and <a>test four</a> text</div> 
<div><a>Test five</a> text</div> 
<div>My <a>test six</a> text</div> 

Die folgenden CSS:

a:only-child { color: #668899; } 

für alle wählt aber testet drei und vier.

a:not(only-child) { color: #668899; } 

wählt für alle, aber ich würde erwarten, dass es nur testet drei und vier wählen.

Wie wähle ich alle Tests aus außer Testen Sie einen nur mit CSS?

Wenn ich nur die Tests zwei bis sechs mit nur CSS stylen kann, kann ich sie mit jQuery stylen? Wenn das so ist, wie?

+0

Wenn Sie einen Doppelpunkt vor dem nur-Kind hinzufügen es funktioniert (getestet in Chrome) 'a: nicht (: nur-Kind) {color: # 668899; } 'Der Grund, warum es vorher nicht funktionierte, war: Nicht() erwartete einen Selektor, und es konnte kein ** ELEMENT ** namens" Nur-Kind "(d. H. Kein Element mit dem Namen ) gefunden werden. – user3862271

+0

Wird Ihr DOM immer so aussehen? Was ist das Besondere an "test one"? Wären Sie bereit, dem gewünschten Element einfach eine ID hinzuzufügen? – user3862271

Antwort

2

Dies ist wahrscheinlich nicht die effizienteste Lösung, aber es funktioniert - vergleichen Sie den Textinhalt jedes Elements <a> mit dem Textinhalt des übergeordneten Elements. Wenn sie die gleichen sind, gelten dann einen anderen Stil:

$('div a').each(function(){ 
 
    if ($(this).text()===$(this).parent().text()) { 
 
    $(this).addClass('onlyChild'); 
 
    } 
 
});
.onlyChild { color: #668899; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div><a>test one</a></div> 
 
<div>My <a>test two</a></div> 
 
<div>My <a>test three</a> and <a>test four</a> text</div> 
 
<div><a>Test five</a> text</div> 
 
<div>My <a>test six</a> text</div>

+0

Vielen Dank; das ist sehr hilfreich. Gehe ich richtigerweise davon aus, dass ich das zu den Style-Tests zwei bis sechs umdrehen könnte, aber teste nicht eins, indem ich stattdessen == zu! = Ändere? (Ich würde wahrscheinlich einen anderen Klassennamen finden wollen.) –

+0

Ja, ändern Sie einfach '==' zu '! =' (Das funktioniert nur dann richtig, wenn Sie 'addClass()' anstelle von 'toggleClass()' verwenden werde die Antwort aktualisieren.) –

+1

Vielen Dank für das Update. Und mein Redakteur will, dass ich das mache === oder! == –

0

Gerade jetzt Ihre Regel wird für ein Element suchen genannt only-child

Mit dieser Selektor Regel

a:not(:only-child) { color: #668899; }

Beispieldemo

a:not(:only-child) { color: red; }
<div><a>test one</a></div> 
 
<div>My <a>test two</a></div> 
 
<div>My <a>test three</a> and <a>test four</a> text</div> 
 
<div><a>Test five</a> text</div> 
 
<div>My <a>test six</a> text</div>

+0

Das scheint nichts auszuwählen. –

Verwandte Themen