Einen Link definieren
nimble
- javascript
Hi
Ich wollte einen Link kreieren:
current_link = document.createElement("a");
current_link.text = line.childNodes[i].text;
current_link.href = line.childNodes[i].getAttribute("link"));
mycurrent_cell.appendChild(current_link);
nun funktioniert das so im IE nicht...
wie kann ich die eigenschaften des links definieren, damit der IE das versteht (setAttribute('href', 'www.xy') versteht dieser ja bekanntlich nicht.
THX
Hallo nimble.
Ich wollte einen Link kreieren:
current_link = document.createElement("a");
current_link.text = line.childNodes[i].text;
current_link.href = line.childNodes[i].getAttribute("link"));
mycurrent_cell.appendChild(current_link);
>
> nun funktioniert das so im IE nicht...
> wie kann ich die eigenschaften des links definieren, damit der IE das versteht (setAttribute('href', 'www.xy') versteht dieser ja bekanntlich nicht.
Da du uns das zugehörige HTML vorenthältst, kann man dir nur zum Debuggin raten. Arbeite folgende Schritte ab:
1\.) Kommentiere alles ab „current\_link.href …“ bis zum Ende dieses Codeschnipsels aus und lasse dir line.childNodes[i].text ausgeben. Stimmt das, was ausgegeben wird, mit dem überein, was du erwartet hast? Wenn nein, gehe zu 2.
2\.) Kommentiere nun lediglich die letzte Zeile deines Codeschnipsels aus und lasse dir line.childNodes[i].getAttribute("link")) (btw.: eine schließende Klammer zu viel) ausgeben. Reaktion und folgende Aktion sind unter 1. nachzulesen.
Das Spielchen treibst du so lange, bis du etwas erhältst, was du nicht erwartet hast.
Einen schönen Samstag noch.
Gruß, Mathias
--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[[HTML Design Constraints: Logical Markup](http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/HTMLConstraints.html)]
Hi
Da du uns das zugehörige HTML vorenthältst, kann man dir nur zum Debuggin raten. Arbeite folgende Schritte ab:
fehlen tun nur noch einige append Befehle und ein div mit einer ID wo das ganze dann eingehängt wird...
1.) Kommentiere alles ab „current_link.href …“ bis zum Ende dieses Codeschnipsels aus und lasse dir line.childNodes[i].text ausgeben. Stimmt das, was ausgegeben wird, mit dem überein, was du erwartet hast?
ich habe alles auskommentiert und stattdessen
current_link = document.createTextNode(line.childNodes[i].text);
eingefügt - das hat auch wunderbar geklappt.
Der Fehler muss also auf den drei Zeilen
current_link = document.createElement("a");
current_link.text = line.childNodes[i].text;
current_link.href = line.childNodes[i].getAttribute("link");
liegen.
ich habe .text und .href mit alert ausgegeben, da steht wass stehen soll. nur bei der ausgabe alert(current_link); blieb die Anzeige leer.
2.) Kommentiere nun lediglich die letzte Zeile deines Codeschnipsels aus und lasse dir line.childNodes[i].getAttribute("link")) (btw.: eine schließende Klammer zu viel) ausgeben. Reaktion und folgende Aktion sind unter 1. nachzulesen.
Wie du siehst ist die Klammer nur ein überbleibsel einer meiner versuche zu Debuggen - die wird übrigens direkt als Fehlermeldung angegeben - ich habe jedoch keine Fehlermeldung, aber auch keinen Link
THX
Hallo nimble.
Der Fehler muss also auf den drei Zeilen
current_link = document.createElement("a");
current_link.text = line.childNodes[i].text;
current_link.href = line.childNodes[i].getAttribute("link");
> liegen.
> ich habe .text und .href mit alert ausgegeben, da steht wass stehen soll. nur bei der ausgabe alert(current\_link); blieb die Anzeige leer.
Und was passiert bei alert(line.childNodes[i].link)?
Einen schönen Samstag noch.
Gruß, Mathias
--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[[HTML Design Constraints: Logical Markup](http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/HTMLConstraints.html)]
Hi
Und was passiert bei alert(line.childNodes[i].link)?
alert(current_link.text); => Weitere info
alert(curret_link.href); => http://www.nimble.ch
THX
Hallo,
Ich wollte einen Link kreieren:
current_link = document.createElement("a");
current_link.text = line.childNodes[i].text;
^Woher hast Du die Information, dass es [link:http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-48250443@title=HTMLAnchorElement].text gibt?
current_link.href = line.childNodes[i].getAttribute("link"));
mycurrent_cell.appendChild(current_link);
>
~~~javascript
current_link = document.createElement("a");
current_link.appendChild(document.createTextNode(line.childNodes[i].text));
current_link.href = line.childNodes[i].getAttribute("link");
mycurrent_cell.appendChild(current_link);
viele Grüße
Axel
Hallo Axel,
current_link.href = line.childNodes[i].getAttribute("link");
mycurrent_cell.appendChild(current_link);
Fehlt da nicht vorher auch noch
~~~javascript
myHref = [link:http://de.selfhtml.org/javascript/objekte/document.htm#create_attribute@title=document.createAttribute('href')];
myHref.nodeValue = "http://www.nimble.ch";
current_link.setAttributeNode(myHref);
~~~?
Gruß Gernot
Hallo,
Fehlt da nicht vorher auch noch
myHref = [link:http://de.selfhtml.org/javascript/objekte/document.htm#create_attribute@title=document.createAttribute('href')];
myHref.nodeValue = "http://www.nimble.ch";
current_link.setAttributeNode(myHref);
Nein, das Attribut href bringen [HTMLAnchorElement](http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-48250443)e von sich aus mit.
viele Grüße
Axel
Hallo Axel,
Nein, das Attribut href bringen HTMLAnchorElemente von sich aus mit.
Daran scheinen sich die diversen Browser aber nicht zu halten:
<a name="meineSprungmarke">Hallo</a>
wird nicht mit der defaultmäßig üblichen Unterstreichung und der Hand beim Drüberfahren als Link ausgezeichnet, und das ist ja wohl auch gut so.
Bei Firefox 1.5.0.6 reicht schon das Setzen des href-Attributs ohne Wertzuweisung, um dieses Erscheinungsbild hervorzurufen.
<a href >Hallo</a>
Bei IE 6 und Opera 9 bedarf es dazu dann doch sogar auch noch der Zuweisung eines Wertes, und sei es auch nur eine leere Zeichenkette.
<a href="" >Hallo</a>
Gruß Gernot
Hallo,
Nein, das Attribut href bringen HTMLAnchorElemente von sich aus mit.
Daran scheinen sich die diversen Browser aber nicht zu halten:
doch ;-)
<a name="meineSprungmarke">Hallo</a>
> wird nicht mit der defaultmäßig üblichen Unterstreichung und der Hand beim Drüberfahren als Link ausgezeichnet, und das ist ja wohl auch gut so.
Ja, weil das Attribut href keinen Inhalt hat.
Vergleiche die Ausgaben in
<a name="meineSprungmarke" onclick="alert(this.href);alert(this.blah);">Hallo</a>
this.href = [leer]
this.blah = undefined
> Bei Firefox 1.5.0.6 reicht schon das Setzen des href-Attributs ohne Wertzuweisung, um dieses Erscheinungsbild hervorzurufen.
> ~~~html
> <a href >Hallo</a>
>
Offensichtlich setzt er dann href="". Das ist nicht korrekt, allerdings ist auch die Notation <a href >Hallo</a> nicht korrekt, so dass man nicht von einem FF Bug sprechen kann.
Bei IE 6 und Opera 9 bedarf es dazu dann doch sogar auch noch der Zuweisung eines Wertes, und sei es auch nur eine leere Zeichenkette.
<a href="" >Hallo</a>
Richtig. Aber was hat das damit zu tun, ob die Eigenschaft href standardmäßig für A-Elemente vorhanden ist. Vorhanden sein heißt doch nicht automatisch auch einen Inhalt haben. HTMLAnchorElemente haben per default die Eigenschaft href. Sie muss deshab nicht mit createAttribute usw. erzeugt werden, sondern ihr kann sofort mit [HTMLAnchorElement].href=[DOMString] ein Wert zugewiesen werden.
So kannst Du austesten, welche Eigenschaften ein Element per default hat:
~~~javascript
var myA = document.createElement("A");
for (e in myA) document.write(e + "<br>");
viele Grüße
Axel
Hi
Ich versuch jetzt mal die Kommentare aus verschiedenen Antwortern zusammenzuschneiden und meine Antwort darauf zu geben:
Gernot Back »» Haben A-Elemente denn ein Attribut namens "link"?
Du hast in die Falsche Richtung gelesen:
current_link.href = line.childNodes[i].getAttribute("link"));
gesetzt wird das Attribut .href des Links, welches aus diesem XML gelesen wird:
<additional link="http://www.nimble.ch">Ansehen</additional>
Axel Richter »» current_link.text = line.childNodes[i].text;
^Woher hast Du die Information, dass es HTMLAnchorElement.text gibt?
Ja das ist ne ganz Komische Informationsquelle ;-)
Die gesetzten Werte .text und .href können danach auch problemlos ausgegeben werden, also scheint die zuweisung geklappt zu haben...
var myA = document.createElement("A");
for (e in myA) document.write(e + "<br>");
Das muss ich mir merken!
THX
Hallo,
Axel Richter »» current_link.text = line.childNodes[i].text;
^Woher hast Du die Information, dass es HTMLAnchorElement.text gibt?
Ja das ist ne ganz Komische Informationsquelle ;-)
*g* Da steht aber in den Browsersymbolen auch zwischen den Zeilen, dass der IE das nicht kann ;-). Außerdem steht dort, dass nur lesender Zugriff möglich ist.
Hast Du es denn mal mit der Variante aus https://forum.selfhtml.org/?t=134621&m=873367 versucht?
viele Grüße
Axel
Hi»» Hallo,
Axel Richter »» current_link.text = line.childNodes[i].text;
^Woher hast Du die Information, dass es HTMLAnchorElement.text gibt?
Ja das ist ne ganz Komische Informationsquelle ;-)
*g* Da steht aber in den Browsersymbolen auch zwischen den Zeilen, dass der IE das nicht kann ;-). Außerdem steht dort, dass nur lesender Zugriff möglich ist.
*blush* s war wohl schon zu spät, als das ich das zwischen den zeilen auch noch kappiert hätte...
Hast Du es denn mal mit der Variante aus https://forum.selfhtml.org/?t=134621&m=873367 versucht?
Das war mein erster schritt heute morgen (gleich nach dem Beantworten ;-)) des Threads... und es FUNKTIONIERT :-)
THX @ all
Hallo Axel,
Vergleiche die Ausgaben in
<a name="meineSprungmarke" onclick="alert(this.href);alert(this.blah);">Hallo</a>
this.href = [leer]
this.blah = undefined
HTMLAnchorElemente haben per default die Eigenschaft href. Sie muss deshab nicht mit createAttribute usw. erzeugt werden, sondern ihr kann sofort mit [HTMLAnchorElement].href=[DOMString] ein Wert zugewiesen werden.
Danke, da habe ich was gelernt. Allerdings scheint die Methode, eine wenn auch bereits vorhandenen Eigenschaft neu anzulegen und ihr dann mit setAttributeNode() einen Wert zuzuweisen auch im IE einwandfrei zu funktionieren.
Auch die Methode setAttribute() des Node-Objekts ist, wie ich gerade getestet habe, eigentlich unproblematisch und möglicherweise hat es ja doch auch gar nichts mit der Frage zu tun, ob das Attribut per Default existiert oder nicht.
Da steht ja in der DOKU nur in Bezug auf die Schreibweise gewisser Attribute wie useMap und readOnly:
"Wenn Sie diese Attribute mit setAttribute() setzen möchten, müssen Sie die angegebene Schreibweise verwenden, damit der Internet Explorer korrekt arbeitet. Allerdings akzeptieren andere Browser diese speziellen Schreibweisen nicht. Deshalb ist es einfacher, den Internet-Explorer-Fehler zu umgehen, indem Sie auf setAttribute() möglichst verzichten und den Direktzugriff nutzen."
Wenn man der Methode aber einen unsinnigen dritten Übergabeparameter, wie eine leere Zeichenkette mitgibt, dann ignorieren das gescheite Browser und auch beim IE ist dann die Groß- oder Kleinschreibung der Eigenschaft irrelevant. Man braucht sich darüber dann also auch keinen Kopf mehr zu machen.
window.onload = function appendInput() {
var myInput = document.createElement("input");
myInput.setAttribute("rEaDoNlY", true, "");
//myInput.readOnly = true;
//myInput.readonly = true;
document.body.appendChild(myInput);
}
Ich habe es bisher unter Windows XP getestet in IE 6, Opera 9, und FF 1. Wie es unter anderen Betriebssystemen aussieht, wäre spannend zu erfahren.
Gruß Gernot
Hallo nochmal,
Wenn man der Methode aber einen unsinnigen dritten Übergabeparameter, wie eine leere Zeichenkette mitgibt,
window.onload = function appendInput() {
var myInput = document.createElement("input");
myInput.setAttribute("rEaDoNlY", true, "");
//myInput.readOnly = true;
//myInput.readonly = true;
document.body.appendChild(myInput);
}
Ich habe mir das gerade noch einmal durch den Kopf gehen lassen; so unsinnig ist der Übergabeparameter für den IE wahrscheinlich nicht, allerdings wäre statt der leeren Zeichenkette eine 0 oder ein false sinniger: Intern arbeitet der IE hier wohl mit seiner [gleichnamigen Methode des All-Objekts](http://de.selfhtml.org/javascript/objekte/all.htm#set_attribute), bei der der dritte Parameter für die Case-Sensitivity zuständig ist.
Gruß Gernot
Hallo,
Ich habe mir das gerade noch einmal durch den Kopf gehen lassen; so unsinnig ist der Übergabeparameter für den IE wahrscheinlich nicht, allerdings wäre statt der leeren Zeichenkette eine 0 oder ein false sinniger: Intern arbeitet der IE hier wohl mit seiner gleichnamigen Methode des All-Objekts, bei der der dritte Parameter für die Case-Sensitivity zuständig ist.
Das Ganze funktioniert auch mit Konqueror (3.3.2) und Mozilla unter Linux.
Allerdings sehe ich den Sinn nicht ganz ein. Bei
myInput.setAttribute("style", "background:#0F0;", 0);
myInput.setAttribute("onblur", "alert('Hallo')", 0);
ist die IE-Unterstützung schon wieder nicht mehr gegeben. Die andere Notation:
myInput.readOnly = true;
myInput.value = "Test";
myInput.style.background = "#0F0";
myInput.onblur = function(){alert('Hallo')};
funktioniert ohne Browserweiche überall. Man muss halt nachsehen, was groß und was klein geschrieben werden muss.
viele Grüße
Axel
Hallo nimble,
current_link = document.createElement("a");
current_link.text = line.childNodes[i].text;
current_link.href = line.childNodes[i].getAttribute("link"));
mycurrent_cell.appendChild(current_link);
> nun funktioniert das so im IE nicht...
Es würde mich wundern, wenn das in irgendeinem Browser funktionierte.
Haben A-Elemente denn ein Attribut namens "link"?
> wie kann ich die eigenschaften des links definieren, damit der IE das versteht (setAttribute('href', 'www.xy') versteht dieser ja bekanntlich nicht.
Genau habe ich das auch erst vor kuzem von [Wahsaga](http://forum.de.selfhtml.org/archiv/2006/7/t133688/#m866924) genau gelernt.
"Der IE mag setAttribute nicht, wenn ein Element ein Attribut "per Default" schon besitzt."
Das Attribut, das du ebenfalls erst [kreieren](http://de.selfhtml.org/javascript/objekte/node.htm#set_attribute_node) musst, weil A-Elemente es per Default eben nicht besitzen, heißt "href".
Gruß Gernot
Hi,
current_link.href = line.childNodes[i].getAttribute("link"));
Es würde mich wundern, wenn das in irgendeinem Browser funktionierte.
Haben A-Elemente denn ein Attribut namens "link"?
Woher willst Du wissen, ob line ein a-Element ist?
cu,
Andreas
Hallo Andeas,
Woher willst Du wissen, ob line ein a-Element ist?
Ja, mein Fehler:
https://forum.selfhtml.org/?t=134621&m=873393
Gruß Gernot