Alt 29.04.2008, 17:27:38   #1 (permalink)
Greggy
Kies-Media.de

ID: 279865
Lose senden

Greggy eine Nachricht über Skype™ schicken
Reg: 27.07.2007
Beiträge: 578
Standard [JS] replace nur auf html-content [ERLEDIGT]

hi,

ich lese eine webseite mittels
text=document.body.innerHTML;
ein.
jetzt möchte ich, dass immer wenn auf der seite ein suchwort erscheint, dieses durch ein ersetzungswort ersetzt wird ..... allerdings so, das die ersetzungen nur im content gemacht werden, also z.b.
HTML-Code:
1:
<a href="irgendwas">Suchwort</a>
soll NICHT ersetzt werden, weil das suchwort als link-text drin ist
oder
HTML-Code:
1:
<div id="suchwort">
....soll auch NICHT ersetzt werden, weil suchwort zum "html-funktionscode" gehört
==> also wirklich nur der sichtbare content soll geändert werden....wie geht das?

Vielen Dank schonmal im vorraus

P.s. eventuell geht das auch ganz anders....ich bin für alle vorschläge dankbar

Geändert von Greggy (04.05.2008 um 18:28:52 Uhr)
Greggy ist offline   Mit Zitat antworten
Alt 30.04.2008, 09:06:44   #2 (permalink)
CrazySash
Erfahrener Benutzer

ID: 93631
Lose senden

Reg: 20.04.2006
Beiträge: 2.276
Standard

ich weiß zwar nicht wie komplex dein script ist, aber eine super Hilfe allgemein in solchen Dingen ist www.jquery.com.

Da kannst du Suchmuster über deinen Quelltext jagen und unkompliziert ersetzen!
 
CrazySash ist offline   Mit Zitat antworten
Alt 30.04.2008, 09:37:59   #3 (permalink)
Greggy
Kies-Media.de

ID: 279865
Lose senden

Greggy eine Nachricht über Skype™ schicken
Reg: 27.07.2007
Beiträge: 578
Standard

Zitat:
Zitat von CrazySash Beitrag anzeigen
ich weiß zwar nicht wie komplex dein script ist, aber eine super Hilfe allgemein in solchen Dingen ist www.jquery.com.

Da kannst du Suchmuster über deinen Quelltext jagen und unkompliziert ersetzen!
erstmal danke für die antwort

du beziehst dich bestimmt auf diese funktion, aber auch die kontrolliert nicht, ob der text nur im content ist....
hintergrund ist, dass der selbe code auf 1000 verschiedenen webseiten (mit 1000 verschiedenen strukturen) eingebaut werden soll und ich deshalb kein genaues suchmuster angeben kann.
Ziel ist es beispielsweise überall wo im content das wort: "böses wort" steht, dieses durch "gutes wort" zu ersetzten

Mfg Greggy
Greggy ist offline Threadstarter   Mit Zitat antworten
Alt 30.04.2008, 13:15:52   #4 (permalink)
ice-breaker
return void
Benutzerbild von ice-breaker

ID: 93995
Lose senden

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.271
Standard

Zitat:
Zitat von Greggy Beitrag anzeigen
Ziel ist es beispielsweise überall wo im content das wort: "böses wort" steht, dieses durch "gutes wort" zu ersetzten
hmm, du müsstest den DOM-Baum durchwandern, alle bösen Inhalte mit RegExp replacen, nur den Sinn versteh eich nicht.
"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

www.internet-dsl-flatrate.de
ice-breaker ist offline   Mit Zitat antworten
Alt 01.05.2008, 11:57:38   #5 (permalink)
Greggy
Kies-Media.de

ID: 279865
Lose senden

Greggy eine Nachricht über Skype™ schicken
Reg: 27.07.2007
Beiträge: 578
Standard

Zitat:
Zitat von ice-breaker Beitrag anzeigen
hmm, du müsstest den DOM-Baum durchwandern, alle bösen Inhalte mit RegExp replacen, nur den Sinn versteh eich nicht.
ich will doch aber den selben javascriptcode auf 1000 verschiedenen seiten einsetzen (mit 1000 verschiedenen DOM-Strukturen)....der sinn liegt doch auf der hand: stell dir vor du willst einen service für webseiten anbieten, und sagst: wenn du meinen java-script-code auf deiner seite einsetzt gearantiere ich dir, wird es auf deiner seite z.b. keine Nazi-wörter geben (z.b. für foren)....ich will jetzt keine diskussion, ob die meisten foren soetwas schon haben!!!....es geht um die funktion selber

Hab ich das ausreichend erklärt, wass die funktion machen soll?

ich will quasi eine funktion replace2(original_Html_code,zu_ersetzendes_wort,ersetzes_wort)
{

return korigierten_html_code;
}

wo ich den html-code einer seite reingebe, dann ein böses wort, ein gutes wort, und als ausgabe ist der html code verbessert worden. Dabei soll aber die struktur, das design, die funktionalität usw. der Html-seite erhalten bleiben!....also darf die ersetztung nur auf dem lesbaren text erfolgen und z.b. auch nicht das böse_wort in einem ggf. enhaltenen <script>function böses_wort(){....}</script> ersetzt werden, weil dadurch ja die funktion nicht mehr aufrufbar wäre

bitte helft mir...

Mfg Greggy
Greggy ist offline Threadstarter   Mit Zitat antworten
Alt 01.05.2008, 14:02:00   #6 (permalink)
ice-breaker
return void
Benutzerbild von ice-breaker

ID: 93995
Lose senden

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.271
Standard

öhm, du weisst aber schon das du den Baum durchlaufen kannst, ohne deren Struktur zu kennen?
Also einfach rekursiv alles durchlaufen und fertig
"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

www.internet-dsl-flatrate.de
ice-breaker ist offline   Mit Zitat antworten
Alt 01.05.2008, 16:16:31   #7 (permalink)
Greggy
Kies-Media.de

ID: 279865
Lose senden

Greggy eine Nachricht über Skype™ schicken
Reg: 27.07.2007
Beiträge: 578
Standard

theoretisch schon....ich bin halt leider nicht so der JS-experte

ich dachte das das eventuell ne fertige funktion dafür gibt?!?

falls nicht, kannst du grob mal zeigen, wie sowas aussieht?

Mfg Greggy
Greggy ist offline Threadstarter   Mit Zitat antworten
Alt 01.05.2008, 21:11:03   #8 (permalink)
Moloc
Erfahrener Benutzer

ID: 109565
Lose senden

Reg: 28.04.2006
Beiträge: 153
Standard

Schau dir das mal an: http://de.selfhtml.org/javascript/objekte/node.htm
 
Moloc ist offline   Mit Zitat antworten
Alt 03.05.2008, 09:17:35   #9 (permalink)
CrazySash
Erfahrener Benutzer

ID: 93631
Lose senden

Reg: 20.04.2006
Beiträge: 2.276
Standard

Zitat:
Zitat von Greggy Beitrag anzeigen
ich will doch aber den selben javascriptcode auf 1000 verschiedenen seiten einsetzen (mit 1000 verschiedenen DOM-Strukturen).

Mfg Greggy

Wie bereits gesagt: Das ist mit jquery möglich.

Du kannst den ersten Knoten auswählen und dann den Inhalt des Container auslesen auf dein Wort durchsuchen ggf. ersetzen und dann gehst du zumnächsten. Wenn ein Link kommen sollte, kannst du diesen ignorieren.

Dazu musst du die Struktur nicht kennen!

Hab im moment wenig Zeit, sonst hätte ich dir gern nen Beispiel gegeben. Liefere ich aber gerne noch nach.
 
CrazySash ist offline   Mit Zitat antworten
Alt 03.05.2008, 18:07:58   #10 (permalink)
tleilax
be forever curious
Benutzerbild von tleilax

ID: 27936
Lose senden

Reg: 20.04.2006
Beiträge: 2.428
Standard

Ich habe grade mal ein bisschen rumprobiert, weil mich die Fragestellung interessiert hat und folgendes ist dabei rausgekommen. Vielleicht hilft's Dir ja weiter...

HTML-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
<html> <head> <title>Foo</title> <script type="text/javascript"> //<![CDATA[ Array.prototype.contains = function(needle) { for (var i = 0, found=false; i < this.length; i++) { if (this[i] == needle) { found = true; break; } } return found; } var bad_words = { 'böses': 'gutes', 'nicht gut' : 'super' } var no_replace = ['a', 'img', 'iframe']; function searchTree(tree) { var branch = tree.firstChild; do { if (no_replace.contains(branch.nodeName.toLowerCase())) { continue; } else if (branch.hasChildNodes() && !(branch.childNodes.length==1 && branch.firstChild.nodeType==3)) { searchTree(branch); } else if (branch.nodeType!=3) { for (var bad_word in bad_words) { eval("var reg_exp = /"+bad_word+"/i;"); while (branch.innerHTML.search(reg_exp)>-1) { branch.innerHTML = branch.innerHTML.replace(reg_exp, bad_words[bad_word]); } } } } while (branch = branch.nextSibling); } window.onload = function() { searchTree(document.getElementsByTagName('body')[0]); } //]]> </script> </head> <body> <h1>Test für böses Wort</h1> <p> <a href="link">Ich bin ein böses Wort und werde nicht ersetzt</a> <div>Hier ist noch ein böses Wort und das finde ich nicht gut.</div> </p> <p> Hier wird nix ersetzt, weil hier auch nix steht. </p> </body> </html>
In bad_words werden halt wie im Code zu setzen ist, die zu ersetzenden Wörter definiert. In no_replace werden die Tags eingetragen, innerhalb derer nicht ersetzt werden soll.
.lange tage und angenehme nächte, tlx
:.whatthemovie.com (Screenshots raten) | PHP ExportForce-Klasse
tleilax ist offline   Mit Zitat antworten
Alt 03.05.2008, 19:57:10   #11 (permalink)
paddya
Erfahrener Benutzer

ID: 296438
Lose senden

paddya eine Nachricht über ICQ schicken paddya eine Nachricht über MSN schicken
Reg: 04.09.2007
Beiträge: 529
Standard

Zitat:
Zitat von tleilax Beitrag anzeigen
...
Da fehlt noch die Einbindung von Prototype, glaube ich.

Greetz

paddya
 
paddya ist offline   Mit Zitat antworten
Alt 03.05.2008, 21:40:51   #12 (permalink)
ice-breaker
return void
Benutzerbild von ice-breaker

ID: 93995
Lose senden

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.271
Standard

Zitat:
Zitat von paddya Beitrag anzeigen
Da fehlt noch die Einbindung von Prototype, glaube ich.
ne, das scheint kein protoype zu sein, sieht aus wie normale knoten
"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

www.internet-dsl-flatrate.de
ice-breaker ist offline   Mit Zitat antworten
Alt 03.05.2008, 22:02:20   #13 (permalink)
tleilax
be forever curious
Benutzerbild von tleilax

ID: 27936
Lose senden

Reg: 20.04.2006
Beiträge: 2.428
Standard

Wie kommt Ihr denn jetzt auf Prototype? Nur weil ich den Prototype des Arrays um die Funktion contains() erweitert habe? Das sind 2 völlig verschiedene Paar Schuhe. Das Framework Prototype hat zwar den Namen aufgrund dieser Möglichkeit, dies zu tun, aber man darf es ruhig ohne das Framework derart einsetzen.

Der Code ist so wie er da steht funktionstüchtig.
.lange tage und angenehme nächte, tlx
:.whatthemovie.com (Screenshots raten) | PHP ExportForce-Klasse
tleilax ist offline   Mit Zitat antworten
Alt 03.05.2008, 22:03:55   #14 (permalink)
paddya
Erfahrener Benutzer

ID: 296438
Lose senden

paddya eine Nachricht über ICQ schicken paddya eine Nachricht über MSN schicken
Reg: 04.09.2007
Beiträge: 529
Standard

Zitat:
Zitat von ice-breaker Beitrag anzeigen
ne, das scheint kein protoype zu sein, sieht aus wie normale knoten
Jo, hast Recht. Mich hat dieses Array.prototype irritiert; nächstes Mal wird vorher gegoogelt

Greetz

paddya
 
paddya ist offline   Mit Zitat antworten
Alt 03.05.2008, 22:09:37   #15 (permalink)
ice-breaker
return void
Benutzerbild von ice-breaker

ID: 93995
Lose senden

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.271
Standard

Zitat:
Zitat von tleilax Beitrag anzeigen
Wie kommt Ihr denn jetzt auf Prototype?
ich, habe doch gar net gesagt, dass es Prototype ist.
"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

www.internet-dsl-flatrate.de
ice-breaker ist offline   Mit Zitat antworten
Antwort

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[S] Content-Hintergrund...erledigt! BiboBrabus Lose4Graphics (erledigt) 2 10.03.2008 12:02:19
[HTML/CSS] Content nicht dynamisch flaschenkind Programmierung 2 17.02.2007 10:44:39
[HTML/PHP] Link im Content öffnen Freeze Programmierung 25 11.10.2006 00:06:15
[HTML/CSS] Menü/Content automatisch verlängern ** erledigt *** strolch00 Programmierung 9 14.08.2006 17:26:47
[HTML] HTML-Code für Textlink anzeigen lassen *erledigt* Murdoch Programmierung 3 13.05.2006 11:25:43


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47:49 Uhr.