CSS auf ein bestimmtes Zeichen anwenden?
Liebe Leute,
Ich möchte mit CSS ein bestimmtes Zeichen formatieren, zum Beispiel alle Rufzeichen auf einer Seite rot einfärben. Ich weiß nicht, wie ich das selektieren soll ohne in den HTML-Code einzugreifen (das soll nicht geschehen).
(Falls das mit keinem Kniff zu bewerkstelligen ist, würde ich mich über ein Javascript-Schnipsel freuen, das das tut.)
2 Antworten
Hi akuzma,
also normalerweise muss man im HTML DOM Klassen und IDs den Elementen zuweisen, damit man mit ihnen was anfangen kann, anders geht es nicht.
Zwar kannst du auf ein Element ohne Klassen und IDs zugreifen in dem du zum Beispiel so selektierst:
body div > p {
color: red;
}
Aber davon rate ich dir ab! Immerhin gibt oder wird es noch mehrere Divs im DOM geben, die im Body drinnen sind. Und ebenfalls mehrere Paragraphen im jeweiligen Div.
Was du machen solltest ist im HTML DOM dem jeweiligen Element die Klasse oder ID zuweisen und diese Klasse/ID dann in CSS Regel zuzuweisen.
#text {
color: red;
}
// oder
.text {
color: red;
}
P.S.: Ich hoffe du weißt Klassen und IDs zu unterscheiden. :)
LG Schark ;)
Wrappe mit JavaScript alle Vorkommen des gewünschten Zeichens via span-Element:
var content = document.body.innerHTML;
document.body.innerHTML = content.replace("!", "<span class=\"marker\">!</span>");
Folgend kannst du die Klasse mit einem CSS-Selektor ansprechen:
.marker { color: red; }
Stimmt. Dies kann man beheben, indem man einen regulären Ausdruck formuliert, der als erstes Argument der replace-Methode übergeben wird und den Suchbereich einschränkt (bspw. statt document.body werden nur p-Elemente ausgewählt o.ä.).
Ob dies ausreicht, muss man je nach Fall dann einmal ausprobieren.
Hehehe... regex9 hat RegEx gesagt! (naja, nicht mit genau dem Wortlaut, aber was solls...) XD
Man könnte aber auch z.B. mit document.body.children beginnen und dann durch die gesamte Baumstruktur iterieren und dabei so Dinge wie if(current_node.tagName == "script") continue; benutzen um script-Tags zu überspringen...
Dabei würde man dann vermutlich noch was wie if(current_node.children.length==0) current_node.innerHTML=current_node.innerHTML.replace('!', '<span class="marker">!</span>'); verwenden, um sicherzugehen, dass man nicht doch ein ! innerhalb eines script-, style- oder sonstigen Tags erwischt.
P.S.: Ein Problem könnten andernfalls auch so Dinge wie <img src="/foo/bar/KATZE!!!.jpg"/> darstellen...
Das müsste ohne die erwähnten Probleme funktionieren:
function markExklamationMarks(element){
if(typeof(element) === 'undefined') element = document.body;
for(let i = 0; i < element.children.length; ++i){
if(element.children[i].children.length > 0) markExklamationMarks(element.children[i]);
else{
if(
element.children[i].tagName != 'script' &&
element.children[i].tagName != 'style'
){
element.children[i].innerHTML = element.children[i].innerHTML.replace('!', '<span class="marker">!</span>');
}
}
}
}
Habs aber noch nicht getestet... ^^
Könnte schiefgehen wenn z.B. ! verwendet wird oder evtl. auch, wenn in einer JS Funktion aus != plötzlich <span class="marker">!</span>= wird... ;)