Variablen vergleichen
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
anschauen
anweisung
block
blocken
code
dank
ende
frage
geschweiften klammern
klammern
problem
schauen
setzen
sinn
stehen
string
test
url
zeichen
zeile
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
aff3m1tw4ff3 schrieb:
Wenn das immer mit 'ATT: ' beginnt und dann die Zahl kommt gibt es eine weit einfachere Lösung als die ifs:
Dann werd ich mal die restlichen if-block´s mit rein machen für die fehlenden Booster und das war´s dann damit.var boost = boostoff.substring(5);
aff3m1tw4ff3 schrieb:
Die Ursache + Lösung dazu wurde sogar schon in einem anderen Thread von dir gezeigt (nur dort bei einer anderen Variablen)...
Dann werd ich mir mal das mit
anschauen.gidon
-
Morgen,
also die restlichen Booster habe ich nun über if-blöcke geregelt, es sind aber auch welche bei die nicht mit ATT: beginnen. Das sieht nun so aus.
if(boostoff == 'ATT: 4') {boost = 'A4';} else if(boostoff == 'ATT: 3') {boost = 'A3';} else if(boostoff == 'ATT: 2') {boost = 'A2';} else if(boostoff == 'ATT: 1') {boost = 'A1';} else if(boostoff == 'DEF: 1') {boost = 'D1';} else if(boostoff == 'DEF: 2') {boost = 'D2';} else if(boostoff == 'DEF: 3') {boost = 'D3';} else if(boostoff == 'DEF: 4') {boost = 'D4';}
Bei
muss ich erst mal den Fehler finden um zu verstehen was da passiert.gidon
Mit deinem Hinweis auf den anderen Fred habe ich mal folgendes geändert:
var gidon = content.split('<a href="/profil/bande:')[1]; var gidoff = (gidon != undefined) ? gidon.split('/')[0].trim() : '';
Läuft soweit super, ist sogar bissl schneller im Aufbau. Wobei ich nicht weiß ob das nun vom
"trim" kommt oder nur am Wetter liegt :)
-
Warum soviel Code? Was machst du wenn du irgendwann auf die Idee kommst ATT und DEF bis 10000 gehen lassen zu wollen?
Das könntest du mit folgender Zeile viel eleganter lösen:
boostoff = boostoff.replace(boostoff.substr(1,4), '');
Spart dir viel Schreibarbeit, und spart auch etwas an zu übertragender Datenmenge.
mfg
-
Zum Glück sind die Booster begrenzt, es fehlen jetzt noch genau 2. Bei denen weiß ich allerdings noch nicht wie Sie im
Quelltext stehen, das konnte ich noch nicht testen.
Um deinen Ansatz mal zu verstehen muss ich fragen ob ich das richtig verstehe.
Durch das
werden dort das 1 und das 4 Zeichen entfernt?replace
boostoff = boostoff.replace(boostoff.substr(1,4), '');
LG -
.substr gibt dir die Teilzeichenkette vom 2. bis zum 5. Zeichen (da das ganze 0-basiert ist) [in deinem fall also "TT: " oder "EF: "]
.replace ersetzt eine Zeichenfolge in einem String durch eine andere [in deinem fall also "TT: " und "EF: " durch "" (Leerstring)]
Nachzulesen hier:
http://de.selfhtml.org/javascript/objekte/string.htm#substr
http://de.selfhtml.org/javascript/objekte/string.htm#replace
mfg -
Ich weiß garnicht was ich nu sagen soll, Ihr seid ja echt Hammer hier.
Hab das mal Probiert und es geht. Das beste ist dazu noch, ich habe es verstanden.
Von 10 Zeilen auf 1 is natürlich ein enormer Unterschied.
Auf SELFHTML war ich auch gerade um das zu verstehen.
Mal noch eine Frage dazu, hackyourlife hatte dafür ja folgenden Code vorgeschlagen,
var boost = boostoff.substring(5);
Wenn ich das richtig verstanden habe wird in dem Fall einfach das 5te Zeichen im String ausgelesen?
Tante Edit:
Mal noch eine Frage dazu, ich habe nun auch Booster die aus der Reihe fallen.
In diesem Fall werden 2 Werte angegeben, kann man hier einfach nochmal mit einem if-block vorher prüfen bevor man über
und.supstr
die Zeichen entfernt?.replace
<!-- so siehts bisher aus --> <span><b>Stärkung:</b><br /> ATT: 2<br /> <br /> <!-- nun kommt bei einem Booster eine weitere Zeile dazu --> <span><b>Stärkung:</b><br /> ATT: 2<br /> DEF: 3<br /> <br />
Wenn ich das richtig sehe habe ich hier ja nun ein Problem mit dem Code da mir ja die Zeichen "abgeschnitten werden.
Im Idealfall sollte er mir diesen Booster nun mit
belegen.var boost = '5'
Beitrag zuletzt geändert: 5.9.2012 13:07:34 von aff3m1tw4ff3 -
syberpsace schrieb:
Ist aber unnütz... wenn du dir meinen Code angesehen hättest würdest du festgestellt haben, dass das genau das gleiche in nur einer einzigen Anweisung macht.
Das könntest du mit folgender Zeile viel eleganter lösen:
boostoff = boostoff.replace(boostoff.substr(1,4), '');
Spart dir viel Schreibarbeit, und spart auch etwas an zu übertragender Datenmenge.
aff3m1tw4ff3 schrieb:
Das gibt den String ab dem 5. Zeichen (bis zum Ende des Strings) zurück.
Mal noch eine Frage dazu, hackyourlife hatte dafür ja folgenden Code vorgeschlagen,
var boost = boostoff.substring(5);
Wenn ich das richtig verstanden habe wird in dem Fall einfach das 5te Zeichen im String ausgelesen?
Wie ich gerade sehe musst du aber den Code noch etwas anpassen um das gewünschte Ergebnis zu erzielen:var boost = boostoff.charAt(0) + boostoff.substring(5);
aff3m1tw4ff3 schrieb:
Hierbei würde nur das ATT berücksichtigt, da du das
In diesem Fall werden 2 Werte angegeben, kann man hier einfach nochmal mit einem if-block vorher prüfen bevor man über
und.supstr
die Zeichen entfernt?.replace
<!-- so siehts bisher aus --> <span><b>Stärkung:</b><br /> ATT: 2<br /> <br /> <!-- nun kommt bei einem Booster eine weitere Zeile dazu --> <span><b>Stärkung:</b><br /> ATT: 2<br /> DEF: 3<br /> <br />
Wenn ich das richtig sehe habe ich hier ja nun ein Problem mit dem Code da mir ja die Zeichen "abgeschnitten werden.
Im Idealfall sollte er mir diesen Booster nun mit
belegen.var boost = '5'
durch ein split beiboostoff
bestimmst, was dir nur das ATT zurückgibt und den Rest verwirft.<br />
-
Die Version musste ich mir nun auch noch anschauen, man will ja wissen was so geht ;)
var boost = boostoff.charAt(0) + boostoff.substring(5);
Ergibt ja vom Prinzip genau das Gleiche wie der andere Code, was da nun besser ist kann ich nicht beurteilen.
Dankbar bin ich für beide Ansätze.
Allerdings scheint das mit dem 2ten Wert ja eh zu einem Problem zu werden durch den Split.
<a class="tooltip" href="#"> <div class="style_buff" > Deine Kampfkraft ist temporär gesteigert</div> <span><b>Stärkung:</b><br /> ATT: 2<br /> DEF: 3<br /> <br /> Noch <b>1</b> mal benutzbar<br /> </span></a> </div>
Da muss ich jetzt mal testen ob das Wort
bei jedem Booster verfügbar ist. Dann könnte ich den Split ja dort ansetzen.Noch
Man müsste ja rein Theoretisch mit einer 2ten Variablen in die man den 2ten Wert schreibt arbeiten können.
Also Quasi
var boosta = boostoff.charAt(0) + boostoff.substring(5); var boostb = boostoff.substring(10); var boost = boosta+boostb; // wird sicher anders berechnet (soll halt mathematisch sein)
So da werde ich mich jetzt mal dran setzen und schauen was passiert.
Gespannt ich bin. -
aff3m1tw4ff3 schrieb:
Der ursprüngliche Code hat nur die Zahl in die Variable gespeichert, jetzt bekommst du deine 'A3' oder 'D1' ... also mit dem Buchstaben davor.
Die Version musste ich mir nun auch noch anschauen, man will ja wissen was so geht ;)
var boost = boostoff.charAt(0) + boostoff.substring(5);
Ergibt ja vom Prinzip genau das Gleiche wie der andere Code, was da nun besser ist kann ich nicht beurteilen.
aff3m1tw4ff3 schrieb:
Was willst du damit erreichen? Irgendwie durchschaue ich den Sinn (falls es einen hat) nicht...
Man müsste ja rein Theoretisch mit einer 2ten Variablen in die man den 2ten Wert schreibt arbeiten können.
Also Quasi
var boosta = boostoff.charAt(0) + boostoff.substring(5); var boostb = boostoff.substring(10); var boost = boosta+boostb; // wird sicher anders berechnet (soll halt mathematisch sein)
So da werde ich mich jetzt mal dran setzen und schauen was passiert.
Gespannt ich bin.
aff3m1tw4ff3 schrieb:
Wo soll da das Problem sein? Auch wenn ich jetzt nicht mehr weiß was der HTML-Code ist wenn nur ein Boost angegeben ist wäre das mein Ansatz:
Allerdings scheint das mit dem 2ten Wert ja eh zu einem Problem zu werden durch den Split.
<a class="tooltip" href="#"> <div class="style_buff" > Deine Kampfkraft ist temporär gesteigert</div> <span><b>Stärkung:</b><br /> ATT: 2<br /> DEF: 3<br /> <br /> Noch <b>1</b> mal benutzbar<br /> </span></a> </div>
Da muss ich jetzt mal testen ob das Wort
bei jedem Booster verfügbar ist. Dann könnte ich den Split ja dort ansetzen.Noch
GM_xmlhttpRequest({ method: 'GET', url: link+'/fight/', onload: function(responseDetails) { var contentstring = responseDetails.responseText; var suchstring = /(Stärkung)/g; var boost = 'No'; var boost2 = 'No'; var booston = ''; var boostoff = ''; var suchergebnis = suchstring.test(contentstring); if(suchergebnis != false) { var content = responseDetails.responseText; booston = content.split('<span><b>Stärkung:</b><br />')[1]; boostoff = booston.split('<br />')[0].trim(); // der 1. Boost boost2 = booston.split('<br />')[1].trim(); // der 2. Boost boost = boostoff.charAt(0) + boostoff.substring(5); // 'nur ein boost' musst du anpassen // entfern dazu den Kommentar in der nächsten Zeile: // alert('\'' + boost2 + '\''); boost2 = (boost2 != 'nur ein boost') : boost2.charAt(0) + boost2.substring(5) : 'No'; }
Du solltest mit
den Inhalt der Variablenalert
ausgeben um herauszufinden was da drin steht wenn es nur einen Boost gibt, damit du dann per if entscheiden kannst ob es 2 Boosts gibt.boost2
-
Hi,
so mal der Vollständigkeit halber, ich habe das Ganze jetzt mit dem Ansatz von hackyourlife so gelöst.
GM_xmlhttpRequest({ method: 'GET', url: link+'/fight/', onload: function(responseDetails) { var contentstring = responseDetails.responseText; var suchstring = /(Stärkung)/g; var boost = '--'; var boost2 = 'No'; var booston = ''; var boostoff = '<img src="http://www.pennereck.de/kw_button/nein.png" width="12" height="12" class="image" title="Du hast keinen Booster aktiviert!"/>'; var suchergebnis = suchstring.test(contentstring); if(suchergebnis != false) { var content = responseDetails.responseText; booston = content.split('<span><b>Stärkung:</b><br />')[1]; boostoff = booston.split('<br />')[0].trim(); // der 1. Boost boost2 = booston.split('<br />')[1].trim(); // der 2. Boost boost = boostoff.charAt(0) + boostoff.substring(5); // beschneiden auf 2 Zeichen Boost 1 boost2 = boost2.charAt(0) + boost2.substring(5); // beschneiden auf 2 Zeichen Boost 2 } if (boost2 == 'D3') //prüfen ob boost A2+D3 angelegt { boost = 'X5'; // wenn A2+D3 dann Variable belegen für DB boostoff = 'A2 + D3' // Ausgabe Button } if (boostoff == 'ATT: 10') //prüfen ob Berserker benutzt wird { boost = '10'; // wenn Berserker benutzt dann Variable belegen für DB boostoff = 'Du Tier ;)' // Ausgabe Button }
hackyourlife schrieb:
var boosta = boostoff.charAt(0) + boostoff.substring(5); var boostb = boostoff.substring(10); var boost = boosta+boostb; // wird sicher anders berechnet (soll halt mathematisch sein)
Was willst du damit erreichen? Irgendwie durchschaue ich den Sinn (falls es einen hat) nicht...
Oh man, ich hab kein Plan wie quer ich da gedacht habe. Ist natürlich so völlig Sinn frei.
Ich weiß nicht wie ich darauf gekommen bin, aber ich habe mich dabei ja nun an Deinen Ansatz gehalten.
Es läuft jetzt auch alles wie ich es wollte. Danke nochmal für die Super Hilfe.
LG Marco
-
Wieso kreierst du nicht die Boostvariable durch die Zahl bzw. ID in der Boostoff Variable?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage