Ich versuche, einige JavaScript-Code von MicrosoftAjax zu JQuery zu verschieben. Ich verwende die JavaScript-Äquivalente in MicrosoftAjax der beliebten .net-Methoden, z. B. String.format(), String.startsWith(), etc. Gibt es Äquivalente zu diesen Methoden in JQuery?
Antworten
Zu viele Anzeigen?El Quellcode für ASP.NET AJAX ist verfügbar zu Ihrer Referenz, so dass Sie sie durchsehen und die Teile, die Sie weiter verwenden möchten, in eine separate JS-Datei aufnehmen können. Oder Sie können sie nach jQuery portieren.
Hier ist die Formatfunktion...
String.format = function() {
var s = arguments[0];
for (var i = 0; i < arguments.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, arguments[i + 1]);
}
return s;
}
Und hier sind die Prototyp-Funktionen endsWith und startsWith...
String.prototype.endsWith = function (suffix) {
return (this.substr(this.length - suffix.length) === suffix);
}
String.prototype.startsWith = function(prefix) {
return (this.substr(0, prefix.length) === prefix);
}
Dies ist eine schnellere/einfachere (und prototypische) Variante der Funktion, die Josh veröffentlicht hat:
String.prototype.format = String.prototype.f = function() {
var s = this,
i = arguments.length;
while (i--) {
s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
}
return s;
};
Verwendung:
'Added {0} by {1} to your collection'.f(title, artist)
'Your balance is {0} USD'.f(77.7)
Ich benutze diese Funktion so oft, dass ich sie einfach in f
verwenden, aber Sie können auch die ausführlichere format
. z.B.. 'Hello {0}!'.format(name)
Viele der oben genannten Funktionen (außer der von Julian Jelfs) enthalten den folgenden Fehler:
js> '{0} {0} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 3.14 afoobc foo
Oder für die Varianten, die vom Ende der Argumentliste rückwärts zählen:
js> '{0} {0} {1} {2}'.format(3.14, 'a{0}bc', 'foo');
3.14 3.14 a3.14bc foo
Hier ist eine korrekte Funktion. Es handelt sich um eine prototypische Variante des Codes von Julian Jelfs, den ich ein bisschen straffer gemacht habe:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{(\d+)\}/g, function (m, n) { return args[n]; });
};
Und hier ist eine etwas fortgeschrittenere Version desselben, die es Ihnen ermöglicht, Klammern durch Verdoppelung zu umgehen:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
if (m == "{{") { return "{"; }
if (m == "}}") { return "}"; }
return args[n];
});
};
Dies funktioniert korrekt:
js> '{0} {{0}} {{{0}}} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 {0} {3.14} a{2}bc foo
Hier ist eine weitere gute Implementierung von Blair Mitchelmore, mit einer Reihe von netten Zusatzfunktionen: https://web.archive.org/web/20120315214858/http://blairmitchelmore.com/javascript/string.format
Eine Formatfunktion erstellt, die entweder eine Sammlung oder ein Array als Argumente akzeptiert
Verwendung:
format("i can speak {language} since i was {age}",{language:'javascript',age:10});
format("i can speak {0} since i was {1}",'javascript',10});
Code:
var format = function (str, col) {
col = typeof col === 'object' ? col : Array.prototype.slice.call(arguments, 1);
return str.replace(/\{\{|\}\}|\{(\w+)\}/g, function (m, n) {
if (m == "{{") { return "{"; }
if (m == "}}") { return "}"; }
return col[n];
});
};
Es gibt eine (einigermaßen) offizielle Option: jQuery.validator.format .
Wird mit jQuery Validation Plugin 1.6 (mindestens) geliefert.
Ganz ähnlich wie bei der String.Format
in .NET gefunden.
bearbeiten Fehlerhafter Link korrigiert.
- See previous answers
- Weitere Antworten anzeigen