Erweiterung der DHTML.JS
Claude
- javascript
Hallo,
Habe ein kleines Javascript erstellt, um eine Seite auf meiner Homepage zu durchsuchen. Geht aber vorserst nur mit MSIE4, da ich das objekt 'all' benutze.
In der dhtml.js (aus SELFHTML) gibt es die Funktionen GetContent(), GetAttribute() usw...
Ich brauche aber ein Ersatz für:
document.all.tags("p").length
das ich in einer Schleife benutze, um anschliessend mit RegExp die verschiedene Inhalte zwischen <p> und </p> zu durchsuchen.
Zusätzlich brauche ich auch eine Art GetContent, die mir den OuterHTML liefert.
Hat jemand die dhtml.js in dieser Hinsicht schon erweitert? Wenn nein, mache ich mich ans Werk (kann dauern .... da ich Neuling in JavaScript bin).
Hier die Suchfunktion:
function searcher(suchwortges)
{
if (NS4) {
alert("Vorerst nur fuer MS IExplorer. An einer Loesung fuer andere Browser wird gearbeitet ...");
return;
}
if (suchwortges.length <2) {
alert("Geben Sie mindestens 2 Zeichen ein!");
return;
}
var inhalttxt = new Array(); //der Text-Inhalt zum durchsuchen
var inhalthtml = new Array(); //den gesamten Text, für wiedergabe
//var suchwortges = "tipp com netz wlan"; //vorerst fest, zum testen
var suchwortanz = 0; // Anzahl der Suchwörter
var suchwort;
var anzp;
var ergzw = 0; //zwischenergebnis für jedes Wort
var treffer = 0;
var meldung = "";
//Suchwörter trennen und anzahl festhalten
meldung = "Suchen nach ... ";
suchwort = suchwortges.split(" "); //in einzelne Wörter trennen
for (var i = 0; i < suchwort.length; i++) {
suchwortanz++;
meldung = meldung + "Wort " + suchwortanz + ": [" + suchwort[i] + "], ";
}
/* Alle P-Tags suchen, und in 2 Arrays speichert (mit und ohne TAG) */
anzp = document.all.tags("p").length-3;
for (var k = 0; k <= anzp; k++) {
if (document.all.tags("p")[k].name != null) {
inhalttxt[k]=document.all.tags("p")[k].innerText;
inhalthtml[k]=document.all.tags("p")[k].outerHTML;
} else {
inhalttxt[k]="";
inhalthtml[k]="";
}
}
document.write("<HTML><HEAD><link rel=stylesheet type="text/css" href="xformate.css"></HEAD><BODY>");
document.write("<a href="javascript:history.back()">zurück zur Liste</a><br><p><s>");
document.write(meldung + " mit UND-Verknuepfung:</s></p>");
//Suchloesung
for (i = 0; i <= anzp; i++) { //jeden Block bzw Array durchsuchen
ergzw=0; //zurücksetzen für jeden Block
for (var j = 0; j < suchwortanz; j++) { //für jedes Wort suchen
suche = new RegExp (suchwort[j],"gi");
var ergebnis = suche.exec(inhalttxt[i]);
if(ergebnis != null)
ergzw++;
}
if(ergzw == suchwortanz) { //wenn ergzw = anzahl der Suchwoerter (bei UND) ... alle wörter gefunden
document.write(inhalthtml[i]);
treffer++;
} else {
document.write("... ");
}
}
document.write("<p>ENDE DER FUNDE... ");
document.write("<br>Anzahl der Treffer: " + treffer);
document.write("<br><a href="javascript:history.back()">zurück zur Liste</a></p>");
document.write("</BODY></HTML>");
}
Moin
Ich brauche aber ein Ersatz für:
document.all.tags("p").length
document.getElementsByTagName("p").length
Gruß
rfb
Hier die Suchfunktion:
Da sind einige Seltsamkeiten drin.
function searcher(suchwortges)
{
if (NS4) {
alert("Vorerst nur fuer MS IExplorer. An einer Loesung fuer andere Browser wird gearbeitet ...");
return;
}
Warum du einen Browser - den es sowieso nicht mehr gibt - ausschließt, obwohl du JS benutzt den eigentlich nur ein Browser kann. Interessant wäre auch zu wissen, wie du NS4 ermittelst
//Suchwörter trennen und anzahl festhalten
meldung = "Suchen nach ... ";
suchwort = suchwortges.split(" "); //in einzelne Wörter trennen
for (var i = 0; i < suchwort.length; i++) {
suchwortanz++;
meldung = meldung + "Wort " + suchwortanz + ": [" + suchwort[i] + "], ";
}
Wozu die Variabel suchwortanz? Das hat den gleichen Wert wie i + 1
Verkettungen kannst du auch kürzer schreiben:
meldung += "Wort " + suchwortanz + ": [" + suchwort[i] + "], ";
/* Alle P-Tags suchen, und in 2 Arrays speichert (mit und ohne TAG) */
anzp = document.all.tags("p").length-3;
getElementsByTagName() kennst du ja schon.
Und das -3 deuten daraufhin, dass du das anders lösen willst.
for (var k = 0; k <= anzp; k++) {
nur ein Stil Hinweis: Du kannst hier durchaus wieder i als Schleifenvariabel verwenden, k kommt immer dann zum Einsatz, wenn du in einer Schleife bist und i belegt ist.
if (document.all.tags("p")[k].name != null) {
Das p Element darf keine Eigenschaft name haben nur die Universalattribute
document.write("<HTML><HEAD><link rel=stylesheet type="text/css" href="xformate.css"></HEAD><BODY>");
Du solltest auch mit JS gernerierte Seiten niczht im Quirksmode anzeigen lassen. ausserdem kannst du dir das maskieren sparen wenn du einfahce uhnd doppelte Anführungszeichen verwendest.
document.write('<HTML><HEAD><link rel=stylesheet type="text/css" href="xformate.css"></HEAD><BODY>');
Struppi.
Hallo, zuerst mal danke für die vielen Tipps. Da ich viel mit VB und VBA programmiere, ist mein Stil für euch etwas verwirrend. Ich will mich aber bessern :-)
if (NS4) {
Warum du einen Browser - den es sowieso nicht mehr gibt - ausschließt, obwohl du JS benutzt den eigentlich nur ein Browser kann. Interessant wäre auch zu wissen, wie du NS4 ermittelst
Siehe dazu SELTHTML unter DHTML, der Script dhtml.js.
NS4 gilt auch für Firefox bzw. Mozilla.
Wozu die Variabel suchwortanz? Das hat den gleichen Wert wie i + 1
Verkettungen kannst du auch kürzer schreiben:
meldung += "Wort " + suchwortanz + ": [" + suchwort[i] + "], ";
Wenn k=0, dann ist suchwortanz=1. Die Variable brauche ich auch noch weiter unten.
/* Alle P-Tags suchen, und in 2 Arrays speichert (mit und ohne TAG) */
anzp = document.all.tags("p").length-3;getElementsByTagName() kennst du ja schon.
Und das -3 deuten daraufhin, dass du das anders lösen willst.
Die -3 weil die 3 letzten P jeder Seite nicht durchsucht werden sollen. Alle meine 450 Seite sind gleich aufgebaut, weil ich diese aus einer Datenabnk generiere.
for (var k = 0; k <= anzp; k++) {
nur ein Stil Hinweis: Du kannst hier durchaus wieder i als Schleifenvariabel verwenden, k kommt immer dann zum Einsatz, wenn du in einer Schleife bist und i belegt ist.
OK, hatte auch am Anfang i benutzt, beim probieren dann k, dann nicht mehr zurückgeändert.
if (document.all.tags("p")[k].name != null) {
Das p Element darf keine Eigenschaft name haben nur die Universalattribute
OK, werde dann mit ID probieren.
document.write("<HTML><HEAD><link rel=stylesheet type="text/css" href="xformate.css"></HEAD><BODY>");
Du solltest auch mit JS gernerierte Seiten niczht im Quirksmode
Was ist der Quirksmode??
... ausserdem kannst du dir das maskieren sparen wenn du einfahce uhnd doppelte Anführungszeichen verwendest.
OK
Struppi.
Also nochmal vielen Dank, das du dir die Mühe gemacht hast, mein Script zu prüfen, da es mein erster ist, und ich viele Tipps erhalten habe. Super.
Auf meine Frage "Erweiterung der dhtml.js" ist das zwar keine Hilfe. Daher kann sicj vielleicht doch noch jemand zu diesem Thema melden.
mfg
Claude