kostenloser Webspace werbefrei: lima-city


JS - replace( ) mit bestimmten Ausnahmen

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    toolz

    Kostenloser Webspace von toolz

    toolz hat kostenlosen Webspace.

    Nachdem ich jetzt wider weitergeschreiben habe, stoße ich auf ein neues Problem: Mit der replace() tag/funktion">Funktion von JS kann man ja bestimmte Texte ersetzen. Mit den richtigen Regexen kann man sogar das Umfeld dieser Zeichenfolge festlegen. Allerdings such eich nach einem Regex und habe es noch nicht gefunden: Ich möchte einen HTML Text analysieren, der z.B. so aussieht:
    <div style="height: 40px;">height ist toll.</div>

    Wenn ich darauf jetzt "replace(/height/gi, 'Das')" anwende, zerstöre ich mir ja das Aussehen, weil dann das herauskommt:
    <div style="Das: 40px;">Das ist toll.</div>

    Leider habe ich kein Regex gefunden, der solche Zeichenfolgen in HTML Anweisungen ignoriert... Was muss ich machen, damit der gewünschte Effekt eintritt? Wichtig: Das Wort, was ich ersetzen will, muss variabel sein (z.B. auch "div" oder "px" usw...).
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo,

    in diesem speziellen Fall könntest Du den Doppelpunkt miteinbeziehen:
    replace(/height[^:]/gi, 'Das')
    damit würde das height nur ersetzt, wenn nicht unmittelbar darauf ein Doppelpunkt folgt.

    lg
    Hans
  4. Autor dieses Themas

    toolz

    Kostenloser Webspace von toolz

    toolz hat kostenlosen Webspace.

    hei schrieb:
    In diesem speziellen Fall könntest Du den Doppelpunkt miteinbeziehen.
    toolz schrieb:
    Wichtig: Das Wort, was ich ersetzen will, muss variabel sein (z.B. auch "div" oder "px" usw...)
    Das geht ja leider nicht...
  5. das-koenigreich

    das-koenigreich hat kostenlosen Webspace.

    Dann mach doch genau das selbe, nur, dass vorne "> (oder vll. noch alternativ " >) und hinten </ stehen muss.
  6. Autor dieses Themas

    toolz

    Kostenloser Webspace von toolz

    toolz hat kostenlosen Webspace.

    Ich versuche das HTML jetzt so zu filtern und an den markierten Stellen den Text später wieder einzusetzen:

    var inhalt = document.getElementsByTagName('body')[0].innerText;
    var html = document.getElementsByTagName('body')[0].innerHTML;
    
    var p = 0;
    var k = 0;
    var stelle = 0;
    var text = false;
    
    while (inhalt.length > k) {
    	if (inhalt.charAt(k) == html.charAt(p)) {
    		if (text) {
    			html = html.substr(0, p) + html.substr(p + 1);
    			k++;
    		} else {
    			html = html.substr(0, p) + '#' + stelle.toString() + html.substr(p + 1 + stelle.toString().length);
    			k++;
    			stelle++;
    			text = true;
    		}
    	} else {
    		text = false;
    	}
    	p++;
    }
    
    alert(html);
    Allerdings bekomme ich nichts ausgegeben. Wo liegt mein Fehler?

    Beitrag zuletzt geändert: 31.8.2010 17:04:28 von toolz
  7. Also vom ding her willst du 3 Dinge machen:
    1. Willst du den Tag von dessen Inhalt trennen, dann
    2. willst du den Inhalt bearbeiten und
    3. willst du die Teile wieder zusammenfügen

    also verpackt man das ganze am besten in eine Funktion, die sieht in diesem Fall etwa so aus:
    String.prototype.replaceInnerHTML = function(regExpObject, replaceString){
      var innerReplace = function(trash, a, b, c){
        return a+b.replace(regExpObject, replaceString)+c;
      };
      return this.replace(/(<\w+[^>]*>)([^<]*)(<\/\w+>)/g, innerReplace);
    };
    und benutzen kannst du das dann wie replace, nur das du nicht replace schreibst, sondern
    replaceInnerHTML(/height/g, 'Das');
    Sieht doch einfach aus oder?
  8. nemoinho schrieb:
    Also vom ding her willst du 3 Dinge machen:
    1. Willst du den Tag von dessen Inhalt trennen, dann
    2. willst du den Inhalt bearbeiten und
    3. willst du die Teile wieder zusammenfügen

    also verpackt man das ganze am besten in eine Funktion, die sieht in diesem Fall etwa so aus:
    String.prototype.replaceInnerHTML = function(regExpObject, replaceString){
      var innerReplace = function(trash, a, b, c){
        return a+b.replace(regExpObject, replaceString)+c;
      };
      return this.replace(/(<\w+[^>]*>)([^<]*)(<\/\w+>)/g, innerReplace);
    };
    und benutzen kannst du das dann wie replace, nur das du nicht replace schreibst, sondern
    replaceInnerHTML(/height/g, 'Das');
    Sieht doch einfach aus oder?


    Öhm solltest Du nicht dazu noch erwähnen das man dafür prototype braucht?
  9. Das hab ich mit Absicht übergangen, denn prototype ist nativ in JS drinne, dazu brauche ich doch kein prototypejs.org :nosmile:
    Außerdem wollte @toolz nur wissen wie man das macht, nicht, was er dazu alles braucht, bzw. können muss.

    Beitrag zuletzt geändert: 31.8.2010 23:41:55 von nemoinho
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!