2017-02-22 27 views

Antwort

4

Da Sie keine Textknoten mit CSS auswählen können, besteht eine Möglichkeit darin, font-size des übergeordneten Elements auf 0 zu setzen, wodurch der gesamte Text effektiv ausgeblendet wird. Dann können Sie den Text für das gewünschte Element zurücksetzen.

.target { 
 
    font-size: 0; 
 
} 
 
.target > :first-child { 
 
    font-size: 16px; 
 
}
<p class="target"> 
 
    <span>First node</span> 
 
    Second node 
 
    More text nodes... 
 
</p>


Alternativ können Sie auch die visibility property auch nutzen (da Sie ein untergeordnetes Element zu visibility: visible festlegen können, auch wenn das übergeordnete Element zu visibility: hidden gesetzt:

.target { 
 
    visibility: hidden; 
 
} 
 

 
.target > :first-child { 
 
    visibility: visible; 
 
}
<p class="target"> 
 
    <span>First node</span> 
 
    Second node 
 
    More text nodes... 
 
</p>


Als Randbemerkung, gesetzt, wenn Sie eine Alternative möchten, können Sie die Textknoten mit <span> Elemente mit JavaScript wickeln und dann die display aller Kinder Element, das nicht das erste Kind zu none verwenden der Wähler:

.target > :not(:first-child) { 
    display: none; 
} 

Hier ein Ausschnitt demonstriert dies:

var target = document.querySelector('.target'); 
 
Array.from(target.childNodes).forEach(function (node, index) { 
 
    if (node.nodeType === 3 && node.nodeValue.trim()) { 
 
    var span = document.createElement('span'); 
 
    span.textContent = node.nodeValue; 
 
    target.replaceChild(span, node); 
 
    } 
 
});
.target > :not(:first-child) { 
 
    display: none; 
 
}
<p class="target"> 
 
    <span>First node</span> 
 
    Second node 
 
    More text nodes... 
 
</p>


Wenn Sie jQuery verwenden, wäre es sogar noch kürzer sein:

$('.target').contents() 
 
    .filter(function() { 
 
    return this.nodeType === 3 && this.nodeValue.trim(); 
 
    }).wrap('<span />');
.target > :not(:first-child) { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p class="target"> 
 
    <span>First node</span> 
 
    Second node 
 
    More text nodes... 
 
</p>

+0

Es wäre hier, aber die Sichtbarkeit wird nicht immer funktionieren, da der Raum noch aufgenommen wird. Ist 'font-size: 0' OK zu tun? Ich dachte, ich würde lesen, dass sich einige Browser damit nicht gut auskennen. – JPM

+0

@JPM - Ja, es wird immer noch Platz einnehmen, wenn man 'visibility: hidden' verwendet, also würde ich persönlich mit der Option' font-size' gehen, da es konsistent arbeitet. Alles hängt davon ab, was Sie versuchen zu erreichen, denke ich. –

+0

an anderer Stelle entdeckt: "Einige Browser erlauben dem Benutzer, eine Mindestschriftgröße festzulegen, die vom Stylesheet einer Website nicht unterschritten werden kann, und es gibt sogar Browser, die standardmäßig einen solchen Mindestwert haben (so der Benutzer) Ich muss es nicht aktiv wählen) ... damit Ihre Labels doch angezeigt werden. " – JPM

0

Sie visibility Elternteil verstecken können und untergeordnetes Element zeigen.

p { 
 
    visibility: hidden; 
 
} 
 
p > :first-child { 
 
    visibility: visible; 
 
}
<p><span>*</span>Here lies a note.</p>

+0

Anfänglich wurde dieses Denken abgelehnt, da es nicht funktionierte. Angenehm überrascht. Ordentlich. Wie gut wird "Sichtbarkeit" unterstützt? (Sieht so aus, als wäre ich nicht der Einzige, der fälschlicherweise die Meinung geändert hat) – Eamonn

+0

Sie können die Browserkompatibilität am Ende von https://developer.mozilla.org/en-US/docs/Web/CSS/visibility sehen –

Verwandte Themen