2016-06-15 12 views
0

Ich habe Probleme mit fliehenden Zeichen (nämlich Zeitraum) in Variablen gefunden, wenn Selektoren in jQuery verwenden. Ich wollte das alles eingeben, aber es war einfacher, einen Screenshot meines Konsolenfensters in Chrome aufzunehmen.Escape-Zeichen in jQuery Variablen funktioniert nicht

Chrome Console Screenshot

Es ist wie die Variablen und den Klartext-Versionen sieht übereinstimmen. Ich erwarte $('#'+escName), um das div zurückzugeben, genau wie $('#jeffrey\\.lamb') gibt ein div zurück. Es tut nicht. Warum?

+0

Sieht so aus, als würden Sie zu viele Backslashes in 'escName' setzen. Es sollte nur "Jeffrey \\. Lamb" sein. Sie brauchen nur einen Backslash in der Zeichenfolge vor dem '.', damit jQuery/Sizzle es als Escape erkennt. – Pointy

+0

Das ist das erste, was ich ausprobiert habe. Ich hatte Zeiten (ich denke in Perl), wo man den Fluchten entkommen musste, wenn man sie in Variablen verwendete, also gab ich das auch. –

+2

Es funktioniert für mich. Bitte [bearbeiten] Sie Ihre Frage und stellen Sie ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) bereit. – Xufox

Antwort

1

Sie müssen in Bezug auf die einzelnen Parser denken, die Ihre String-Werte untersuchen werden. Die allererste ist natürlich der JavaScript-Parser selbst. Backslash-Zeichen haben in der Zeichenfolgengrammatik eine Bedeutung. Wenn Sie also einen einzelnen umgekehrten Schrägstrich in einer Zeichenkette haben möchten, müssen Sie ihn doppelt verwenden.

Nachdem der String aus dem Quellcode in einen internen String-Wert geparst wurde, ist der nächste Punkt, der auf seinen Inhalt achten wird (in diesem Fall) das CSS Selector Evaluator (entweder Sizzle oder der native Code querySelector; nicht sicher, was im Falle von Strings mit Fluchten wie folgt). Dieser Code benötigt nur einen Backslash, um die . zu zitieren, damit er nicht so interpretiert wird, als würde er eine Klassennamenübereinstimmung einführen.

So, escName = "jeffrey\\.lamb"; ist alles was Sie in diesem Fall brauchen.