getElementsByTagName("link") funktioniert nicht
Frequent
- javascript
Hallo,
ich sitze seit einer Weile mit Fragezeichen vor dem Bildschirm. Vielleicht kann mir jemand weiterhelfen.
Ich möchte die <link> Elemente im Header beim Laden der Seite modifizieren. Während ich mit getElementsByTagName auf <meta> problemlos zugreifen kann, passiert bei document.getElementsByTagName("link") nicht viel.
Hat sonst immer funktioniert, von daher bin ich gerade planlos...
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<script type="text/javascript">
function ()
{
if (orientation == 90 || orientation == -90)
{
var morph = document.getElementsByTagName('link');
alert (morph);
alert (morph.length);
for (var x=0; x < morph.length; x++)
{
// irgendwas
}
}
}
</script>
<script type="text/javascript" src="../LOC/scripts/all.js"></script>
<link rel="apple-touch-icon" href="logos/Default.png" />
<link rel="stylesheet" type="text/css" title="mobile" href="../LOC/style/mobile.css" />
<link rel="SHORTCUT ICON" href="images/favicon.ico" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<title>TITEL</title>
</head>
<body>
<div id="header"><h1>Überschrift</h1></div>
<div id="container"></div>
</body>
</html>
Der 1. Alert bringt noch eine [object NodeList] Meldung, der 2. Alert sagt aber die Länge = 0, abwohl ja 3 <link> Elemente im Headers sind. Folglich kommt bei der Schleife nicht viel raus.
Danke für konstruktiven Input,
Grüße,
Frequent
function ()
Wann und wo rufst du die Funktion auf?
Struppi.
function ()
Wann und wo rufst du die Funktion auf?
Struppi.
Hallo,
mit der Funktion will ich das start-up-image je nach Orientierung austauschen.
Nachdem dies ja zu Beginn des Ladevorgangs erfolgen soll, habe ich die Funktion direkt in den <head> geschrieben
<head>
<script type=...>function()</script>
...
<link rel="apple-touch-startup-image" href="images/pad_DefaultV.png" />
...
</head>
Sehe schon... wenn ich erst die Funktion aufrufe und DANACH erst die <link> Elemente kommen, kann da auch nicht viel mehr als 0 drin sein. Mh.
Frage: Wie mache ich es dann? Mit document.write?
Also:
<head>
<script type=...>
function ()
{
if (orientation == 90 || orientation == -90)
{
document.write('<link rel="apple-touch-startup-image" href="images/pad_DefaultH.png />');
}
}
</script>
</head>
Gerade ausprobiert. Funktoniert auch nicht :-(
Gruss
Frequent
Sehe schon... wenn ich erst die Funktion aufrufe und DANACH erst die <link> Elemente kommen, kann da auch nicht viel mehr als 0 drin sein. Mh.
Frage: Wie mache ich es dann?
also ein Grundschüler würde auf die Frage: "So rum gehts nicht, wie dann?" die Antwort "Andersrum!" als erstes nennen!
Sehe schon... wenn ich erst die Funktion aufrufe und DANACH erst die <link> Elemente kommen, kann da auch nicht viel mehr als 0 drin sein. Mh.
Frage: Wie mache ich es dann?
also ein Grundschüler würde auf die Frage: "So rum gehts nicht, wie dann?" die Antwort "Andersrum!" als erstes nennen!
;-)
Ich möchte aber das <link> Element VOR dem Laden anpassen.
Weil wenn:
<link rel="apple-touch-startup-image" href="images/pad_DefaultH.png />
erstmal geladen ist, brauch ich die Abfrage und das Abändern nicht mehr. Daher habe ich die Variante "andersrum" gleich übersprungen.
Gruß,
Frequent
...
erstmal geladen ist, brauch ich die Abfrage und das Abändern nicht mehr. Daher habe ich die Variante "andersrum" gleich übersprungen.
es ist doch immer gut, schon in der soundsovielten Antwort entscheidende Infos zu erhalten. Vielleicht stellst du mal dein Konzept/dein Problem komplett vor statt Infobröckchen zu streuen.
...
erstmal geladen ist, brauch ich die Abfrage und das Abändern nicht mehr. Daher habe ich die Variante "andersrum" gleich übersprungen.
es ist doch immer gut, schon in der soundsovielten Antwort entscheidende Infos zu erhalten. Vielleicht stellst du mal dein Konzept/dein Problem komplett vor statt Infobröckchen zu streuen.
Auch wahr.
Konzept:
Anpassen apple-touch-startup-image per Javascript (ohne xcode) beim Laden der Seite.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<script type="text/javascript">
function ()
{
if (orientation == 90 || orientation == -90)
{
document.write('<link rel="apple-touch-startup-image" href="images/pad_DefaultH.png" />');
}
else
{
document.write('<link rel="apple-touch-startup-image" href="images/pad_DefaultV.png" />');
}
}
</script>
<script type="text/javascript" src="../LOC/scripts/all.js"></script>
<link rel="apple-touch-icon" href="logos/stokkers_Default.png" />
<link rel="stylesheet" href="../LOC/style/mobile.css" type="text/css" media="screen" />
<link rel="SHORTCUT ICON" href="images/favicon.ico" />
<title>TITLE</title>
</head>
<body>
<div id="header"><h1>Überschrift</h1></div>
<div id="container"></div>
</body>
Soweit bin ich. Funktioniert nur leider nicht. Schon mal Danke für ne konstruktive Antwort.
Frequent
Soweit bin ich. Funktioniert nur leider nicht. Schon mal Danke für ne konstruktive Antwort.
Du brauchst diie Funktion nicht, da du sie nie aufrufst. Und wenn du die Seite wirklich in XHTML ausliefern lassen willst, ist document.write keine gute Wahl: http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite
Nimm stattdessen HTML5
Struppi.
Lieber Frequent,
Sehe schon... wenn ich erst die Funktion aufrufe und DANACH erst die <link> Elemente kommen, kann da auch nicht viel mehr als 0 drin sein. Mh.
Frage: Wie mache ich es dann? Mit document.write?
nein, aber Du kannst mit einem Autostart die verschiedenen Zeitlichkeiten auflösen.
Liebe Grüße,
Felix Riesterer.
Lieber Frequent,
Sehe schon... wenn ich erst die Funktion aufrufe und DANACH erst die <link> Elemente kommen, kann da auch nicht viel mehr als 0 drin sein. Mh.
Frage: Wie mache ich es dann? Mit document.write?
nein, aber Du kannst mit einem Autostart die verschiedenen Zeitlichkeiten auflösen.
Liebe Grüße,
Felix Riesterer.
Hallo Felix,
vielen Dank für die konstruktive Info. Schau ich mir gleich mal in Ruhe an.
Viele Grüße,
Frequent
vielen Dank für die konstruktive Info. Schau ich mir gleich mal in Ruhe an.
onload ist nichts anderes, als den Aufruf erst nach dem einbinden des codes zu starten, ausser dass der Aufruf dann noch später erfolgt, nämlich erst wenn alle externen Dateien inkl. Bilder geladen wurden.
Struppi.
<script type="text/javascript">
function ()
Du hast eine Funktion ohne Identifier.
Kläre mich auf, was soll da ablaufen?
Falls das abläuft, wann läuft es ab?
Ich meine ich bin kein JS-Profi und zu faul um das jetzt zu testen. Vielleicht stecken da ja irgendwelche features dahinter?
Ist das etwas da gleiche wie
window = function(){}
???
{
if (orientation == 90 || orientation == -90)
{
var morph = document.getElementsByTagName('link');
alert (morph);
alert (morph.length);
for (var x=0; x < morph.length; x++)
{
// irgendwas
}
}
}
</script>
Der 1. Alert bringt noch eine [object NodeList] Meldung, der 2. Alert sagt aber die Länge = 0, abwohl ja 3 <link> Elemente im Headers sind. Folglich kommt bei der Schleife nicht viel raus.
Wohl weil sie (falls überhaupt) ausgeführt wird, als noch gar keine link Elememente im DOM vorliegen.
mfg Beat