JavaScript in JavaScript variable?

Hallo,
ich möchte in einer Variable javascript speichern. z.b.

var text="

<script type="text/javascript">
var flag=0;
var flag2=0;
var steps=3;
</script>
";

Das scheint nicht zu gehen. Wie macht man sowas?

MfG
 
Hi, ich sehe hier zwei Möglichkeiten:

Code:
<script>
  var code = 'var a = 5; var b = 5; alert(a+b);';
  eval(code);  // moeglichkeit 1
  var myScript = document.createElement('script');
  myScript.innerHTML += code;
  document.body.appendChild(myScript);  // moeglichkeit 2
</script>

Ich würde Möglichkeit 1 vorziehen, allerdings denke ich das es in den meisten Fällen schönere Alternativen gibt.

*Das .innerHTML bei myScript ist unschön und kann wahrscheinlich sehr viel eleganter gelöst werden ;)
 
Zuletzt bearbeitet:
Darüberhinaus hast du noch ein Problem mit deinem Code:

Du weist der Variable text einen String zu, dieser wird durch Anführungszeichen begrenzt, z.B. so:
Code:
var text = "sometext";
Da in deinem String jedoch selbst Anführungszeichen vorkommen, musst du JavaScript mitteilen, dass es sich hierbei nicht um das Ende des Strings, sondern um ein Zeichen im String handelt, hierfür gibt es zwei Lösungswege:

a) Du setzt vor dem Anführungszeichen ein Backslash
Code:
var text = "sometext \" sometext";
b) oder du verwendest zur Begrenzung des Strings einfache Anführungszeichen:
Code:
var text = 'sometext " sometext';
 
Hallo danke für die Tipp die haben mir sehr geholfen...

aber nun habe ich ein neues Problem:(

Code:
function getText(i){
x=0;
if(i>=0){
		var x ="<script type=\"text/javascript\">"
		+"var text=\""
		+getText(i-1)
		+"\";
		+"</script>";
}
return x;
}

Wenn ich diesen Code rekursiv aufrufe, sind sich die Ausrufezeichen wieder im Weg.
Wie kann man dieses Problem lösen?
 
Fällt Dir was auf?


PHP:
function getText(i)
{ x=0;
 if(i>=0)
   {
	var x ="<script type=\"text/javascript\">"
	+"var text=\""
	+getText(i-1)
	+"\";
	+"</script>";
   }
 return x;
}
 
PHP:
function getText(i) 
{ x=0; 
 if(i>=0) 
   { 
    var x ="<script type=\"text/javascript\">" 
    +"var text=\"" 
    +getText(i-1) 
    +"\""
    +"</script>"; 
   } 
 return x; 
}

so ist besser,das ändert leider nichts am Problem. Der String wird unterbrochen wenn man sowas dann auffruft.
 
PHP:
function getText(i) 
{ x=0; 
 if(i>=0) 
   { 
    var x ="<script type=\"text/javascript\">" 
    +"var text=\"" 
    +getText(i-1) 
    +"\""
    +"</script>"; 
   } 
 return x; 
}
so ist besser,das ändert leider nichts am Problem. Der String wird unterbrochen wenn man sowas dann auffruft.

Noch besser:
PHP:
function getText(i) 
{ x=0; 
 if(i>=0) 
   { 
    var x ="<script type=\"text/javascript\">" 
    +"var text=\"" 
    +getText(i-1) 
    +"\";"
    +"</script>"; 
   } 
 return x; 
}
Wo rufst Du die Funktion denn auf? Werden dort evtl. doppelte Anführungszeichen verwendet? Dann müsstest Du dort entweder escapen [via escape() und unescape oder elegant via addslashes() und stripslashes()] oder gleich auf einfache Anführungszeichen ausweichen.

HTML:
<script type="text/javascript">

String.prototype.addSlashes = function() {
return this.replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}

String.prototype.stripslashes= function() {
  return replace(/\\(.?)/g, function (s, n1)
   {
       switch (n1) {
          case '\\':     return '\\';
         case '0':       return '\u0000';
         case '':        return '';
         default:       return n1;
       }
   });
}
</script>

Die Prototype kannst Du dann wie normale Funktionen verwenden:

HTML:
<script type="text/javascript">
var text = "laber mal nicht \"nach\"";
document.write(text.stripslashes());
</script>
ergibt:
HTML:
laber mal nicht "nach"
 
Zuletzt bearbeitet:
hey leider geht dein Bsp. nicht. Aber es finden sich eh gemischte zeichen drin manchmal muss ein einzelnes " stehen bleiben und manchmal würde ich sie gerne so maskieren \"...
aber nach einem rekursiven aufruf und übergabe ist das \" zu " geworden...
naja morgen ist abgabe und werde es wohl leider nicht mehr schaffen :(

bin verwirrt :D es könnte klappen, aber dein Beispiel funzt leider nicht...

EDIT: Habs gefunden es funktioniert, jetzt noch denken um die Uhrzeit, dann wird das noch was...:p
 
Zuletzt bearbeitet:
Zurück
Oben