Greasemonkey-Script, Linkfarbe als firstChild verändern
MoFi
- javascript
Hi @ all,
ich möchte mit einem Greaskonkey-Script die Link-Farben einer Navigationsleiste verändern. Die Leiste ist wie folgt aufgebaut:
<table>
<tbody>
<tr>
<td class="classname"></td>
<td class="classname">
<a href="...">ABC</a>
</td>
<td class="classname">
<a href="...">ABC</a>
</td>
<td class="classname">
<a href="...">ABC</a>
</td>
<td class="classname"></td>
</tr>
</tbody>
</table>
Ich will nun an alle Zellen wie folgt herankommen. Dabei verändere ich noch gleich deren Hintergrund:
classElements = document.evaluate(
"//td[@class='classname']",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for (var i=0; i< classElements.snapshotLength; i++){
thisElement = classElements.snapshotItem(i);
thisElement.style.background = "url('url_to_file')";
if(thisElement.childNodes.length > 0){ //vorher stand hier if(thisElement.firstChild) aber das war auch nix
thisElement.firstChild.style.color = "black";
}
}
Als Fehlermeldung bekomme ich immer:
Fehler: thisElement.firstChild.style is undefined
Was ist dennn falsch?
Wenn ich nun auch noch a:link, a:visited,... einstellen möchte, wie kann ich das machen?
Danke schonmal für eure Hilfe.
Grüße
Hi,
<td class="classname">
<a href="...">ABC</a>
classElements = document.evaluate(
"//td[@class='classname']",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
classELements enthält also die tds mit der Klasse classname (sehr sinnvoller Klassenname übrigens).
Das first-child ist natürlich der Textknoten mit dem Whitespace zwischen dem > vom td und dem < vom a.
Und Textknoten haben keine style-Eigenschaft.
Als Fehlermeldung bekomme ich immer:
Fehler: thisElement.firstChild.style is undefined
Natürlich.
Wenn ich nun auch noch a:link, a:visited,... einstellen möchte, wie kann ich das machen?
Im Stylesheet.
cu,
Andreas
classELements enthält also die tds mit der Klasse classname (sehr sinnvoller Klassenname übrigens).
Das hat natürlich nen anderen Klassennamen. Habe nur den zu Veranschaulichung genommen.
Das first-child ist natürlich der Textknoten mit dem Whitespace zwischen dem > vom td und dem < vom a.
Dann ist alles klar.
Wenn ich nun auch noch a:link, a:visited,... einstellen möchte, wie kann ich das machen?
Im Stylesheet.
Da ich das ganze per Javascript lokal "nachbearbeiten" will hab ich keinen direkten Zugriff auf den Stylesheet
Danke dir
Hi,
Da ich das ganze per Javascript lokal "nachbearbeiten" will hab ich keinen direkten Zugriff auf den Stylesheet
Aber auf's DOM. Und damit kannst Du Elemente im Dokument einfügen. Auch im head. Und sogar style-Elemente.
cu,
Andreas
Aber auf's DOM. Und damit kannst Du Elemente im Dokument einfügen. Auch im head. Und sogar style-Elemente.
Das hat mich auf die Idee gebracht einfach den Stylesheet umzuschreiben, die ursprünglichen zu blocken und meinen einzubinden.
Muss nur ein paar Sachen verändern von daher ist das nicht so viel Aufwand.
Habe jetzt auch die ursprünglichen <link rel="styleheet" ...> gelöscht und will nun meim eigenes einbinden.
Leider bekomme ich die Rückmeldung:
Security error
Gibt es ne Möglichkeit den trotzdem einzubinden, auch wenn er auf meiner Festplatte ist?
Danke schonmal,
Hab es hinbekommen.
Hier steht es erklärt:
http://www.computerbase.de/forum/showthread.php?t=533089
Grüße
Aber wie kann ich nun überprüfen welches childNode der Link ist?
Kann ich abfragen, ob es sich um einen Tag handelt?
Grüße
Hi,
Aber wie kann ich nun überprüfen welches childNode der Link ist?
Jeder Node hat einen Typ. Den kann man abfragen (genaue Syntax im Selfhtml nachgucken ...)
Kann ich abfragen, ob es sich um einen Tag handelt?
Nein. Aber ob es sich um ein Element handelt.
Oder Du holst Dir alle a-Elemente im gefundenen td und nimmst davon den ersten.
cu,
Andreas
Kann ich abfragen, ob es sich um einen Tag handelt?
Nein. Aber ob es sich um ein Element handelt.
Oder Du holst Dir alle a-Elemente im gefundenen td und nimmst davon den ersten.
Oder man verwendet statt firstChild firstElementChild. Können alle Browser außer IE < 9.
Mathias
Oder man verwendet statt firstChild firstElementChild. Können alle Browser außer IE < 9.
Das ist perfekt.
Danke
Hi,
Oder man verwendet statt firstChild firstElementChild.
Danke - kannte ich noch nicht.
Können alle Browser außer IE < 9.
Also mal wieder die übliche Ausnahme ...
cu,
Andreas
Können alle Browser außer IE < 9.
Also mal wieder die übliche Ausnahme ...
Ist ja kein Problem, das für ältere Browser nachzubauen: http://www.w3.org/2008/12/23-ElementTraversal.html
IE 8 kann ferner Getter und Setter mit ECMAScript 5 Property Descriptors und unterstützt die prototypische Erweiterung von Element (Beispiel) - womit man die Eigenschaften so nachbauen kann, dass die Verwendung vollkommen transparent erfolgen kann.
Aber solange es nur um GreaseMonkey-Scripte geht, kann einem IE wohl komplett egal sein.
Mathias