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?Wenn Sie das Validierungs-Plugin verwenden, können Sie es benutzen:
jQuery.validator.format("{0} {1}", "cool", "formatting") = 'cool formatting'
http://docs.jquery.com/Plugins/Validation/jQuery.validator.format#templateargumentargumentN ...
Obwohl es nicht genau das ist, wonach Q gefragt hat, habe ich ein ähnliches System gebaut, das aber benannte statt nummerierte Platzhalter verwendet. Ich persönlich ziehe es vor, benannte Argumente zu haben und einfach ein Objekt als Argument zu senden (ausführlicher, aber leichter zu pflegen).
String.prototype.format = function (args) {
var newStr = this;
for (var key in args) {
newStr = newStr.replace('{' + key + '}', args[key]);
}
return newStr;
}
Hier ist ein Beispiel für die Verwendung...
alert("Hello {name}".format({ name: 'World' }));
Mit einem modernen Browser, der EcmaScript 2015 (ES6) unterstützt, können Sie Folgendes genießen Vorlage Strings . Anstatt zu formatieren, können Sie den Variablenwert direkt in den Text einfügen:
var name = "Waleed";
var message = `Hello ${name}!`;
Beachten Sie, dass die Schablonenzeichenfolge mit Back-Ticks (`) geschrieben werden muss.
Keine der bisher vorgestellten Antworten hat eine offensichtliche Optimierung der Verwendung von enclosure zur einmaligen Initialisierung und Speicherung regulärer Ausdrücke für spätere Verwendungen.
// DBJ.ORG string.format function
// usage: "{0} means 'zero'".format("nula")
// returns: "nula means 'zero'"
// place holders must be in a range 0-99.
// if no argument given for the placeholder,
// no replacement will be done, so
// "oops {99}".format("!")
// returns the input
// same placeholders will be all replaced
// with the same argument :
// "oops {0}{0}".format("!","?")
// returns "oops !!"
//
if ("function" != typeof "".format)
// add format() if one does not exist already
String.prototype.format = (function() {
var rx1 = /\{(\d|\d\d)\}/g, rx2 = /\d+/ ;
return function() {
var args = arguments;
return this.replace(rx1, function($0) {
var idx = 1 * $0.match(rx2)[0];
return args[idx] !== undefined ? args[idx] : (args[idx] === "" ? "" : $0);
});
}
}());
alert("{0},{0},{{0}}!".format("{X}"));
Außerdem respektiert keines der Beispiele die format()-Implementierung, wenn eine solche bereits existiert.
Die Nachsaison ist zwar schon lange vorbei, aber ich habe mir gerade die Antworten angesehen und möchte meinen Senf dazu geben:
Verwendung:
var one = strFormat('"{0}" is not {1}', 'aalert', 'defined');
var two = strFormat('{0} {0} {1} {2}', 3.14, 'a{2}bc', 'foo');
Methode:
function strFormat() {
var args = Array.prototype.slice.call(arguments, 1);
return arguments[0].replace(/\{(\d+)\}/g, function (match, index) {
return args[index];
});
}
Ergebnis:
"aalert" is not defined
3.14 3.14 a{2}bc foo