auf Kommentare zugreifen ?
Raik
- javascript
Hallo!
Da viele Leute bei eBay ihre Beschreibungstexte nicht mit Html formatieren, möchte ich zwecks besserer Lesbarkeit mit einem Bookmarklet die Kommentare <!-- Begin Description --> und <!-- End Description --> durch <pre> </pre> ersetzen.
Nun sind aber Kommentare keine über DOM ansprechbaren Elemente, soweit ich weis.
Gibt es eine Möglichkeit, z.b. auf den Inhalt von document als plain text zuzugreifen, um ihn nach der Zeichenfolge zu durchsuchen?
Die Suche mit "Kommentar category:Javascript" hat nichts ergeben, was mir einen brauchbaren Ansatz liefern würde und ich habe auch keine andere Idee, woran ich mich orientieren könnte, um im DOM-Baum den fraglichen Text zu finden.
freundl. Grüsse aus Berlin, Raik
Hallo,
Die Suche mit "Kommentar category:Javascript" hat nichts ergeben, was mir einen brauchbaren Ansatz liefern würde und ich habe auch keine andere Idee, woran ich mich orientieren könnte, um im DOM-Baum den fraglichen Text zu finden.
Auch Kommentare werden im DOM abgebildet. Ein Kommentarknoten liefert als Knotentypwert 8 (1=Elementknoten, 2=Attributknoten, 3=Textknoten usw.):
...
<body onload="Test()">
<!-- bla -->
<!-- blub -->
</body>
...
Die Test-Funktion:
function Test()
{
var el,anz
el=document.getElementsByTagName("*");
anz=el.length;
for(i=0;i<anz;i++)
{
if(el.item(i).nodeType==8)alert(el.item(i).nodeValue);
}
}
MfG, Thomas
[Nachtrag:]
Die Test-Funktion:
function Test()
{
var el,anz
el=document.getElementsByTagName("*");
anz=el.length;for(i=0;i<anz;i++)
{
if(el.item(i).nodeType==8)alert(el.item(i).nodeValue);
}
}
Mozilla und Opera geben nichts aus ...
Ich habe mich vom IE verwirren lassen, der auch Kommentare ueber document.getElementsByTagName("*") mitnimmt, obwohl man diese ja nicht als Elemente versteht. Hier mal eine erweiterte Fassung:
function Test()
{
var el,anz,cnanz;
el=document.getElementsByTagName("*");
anz=el.length;
for(i=0;i<anz;i++)
{
if(el.item(i).hasChildNodes())
{
cnodes=el.item(i).childNodes;
cnanz=cnodes.length;
for(j=0;j<cnanz;j++)
{
if(cnodes.item(j).nodeType==8)alert(cnodes.item(j).nodeValue);
}
}
}
}
MfG, Thomas
Hallo, Thomas!
function Test()
{
[...]
}
Wow! Vielen Dank, damit komm ich bestimmt weiter. :-)
Wenn ich das fertig hab, bevor der Tread im Archiv verschwindet, poste ich es noch hier.
freundl. Grüsse aus Berlin, Raik
Hallo, Thomas!
Wenn ich das fertig hab, bevor der Tread im Archiv verschwindet, poste ich es noch hier.
Zu früh gefreut.
<script type="text/javascript">
function Test(){
var el=document.getElementsByTagName('!');
var i=0;
while(el[i].nodeValue!=' Begin Description '){
i++;
}
var pretxt = document.createElement("pre");
var tmp = el[i].nextSibling;
while(tmp.nodeValue!=' End Description '){
tmp2=tmp.cloneNode(true);
pretxt.appendChild(tmp2);
tmp.nodeValue="";
while(tmp.childNodes.length>0){
tmp.removeChild(tmp.firstChild);
}
tmp = tmp.nextSibling;
}
tmp.parentNode.replaceChild(pretxt,el[i]);
}
</script>
Dabei gehen immer die Zeilenumbrüche aus dem Sourcecode verloren, so dass das Ganze sinnfrei wird.
btw.: Kommentare lassen sich über getElementsByTagName('!') ansprechen und haben den nodeName "#comment" (im IE).
Fällt Dir noch was ein, wie man das lösen könnte?
freundl. Grüsse aus Berlin, Raik
Hallo,
Dabei gehen immer die Zeilenumbrüche aus dem Sourcecode verloren, so dass das Ganze sinnfrei wird.
Dann erzeuge doch einfach br-Elemente an den betroffenen Stellen.
btw.: Kommentare lassen sich über getElementsByTagName('!') ansprechen und haben den nodeName "#comment" (im IE).
Deshalb werden Kommentare auch durch getElementsByTagName("*") erfasst, aber eben nur im IE.
MfG, Thomas
Hallo, Thomas!
Dabei gehen immer die Zeilenumbrüche aus dem Sourcecode verloren, so dass das Ganze sinnfrei wird.
Dann erzeuge doch einfach br-Elemente an den betroffenen Stellen.
Das hab ich mir dann auch überlegt. Ich hab nur keine Möglichkeit gefunden, auf den Inhalt zuzugreifen, ohne das die Zeilenumbrüche verloren gehen. Wenn der Text nicht schon mit <pre></pre> formatiert ist, werden Zeilenumbrüche als Leerzeichen interpretiert.
Mit anderen Worten: Ich finde keine Zeilenumbrüche beim Zugriff mit Javascript.
Anscheinend ein unlösbares Problem ... :-(
freundl. Grüsse aus Berlin, Raik
Hallo, Thomas!
Anscheinend ein unlösbares Problem ... :-(
Wenn ich per Javascript nachträglich einen DOCTYPE strict einfügen könnte, würde body {white-space: pre;} das Gewünschte bewirken, geht aber auch nicht.
freundl. Grüsse aus Berlin, Raik