2012-04-08 4 views
0

Bitte beachten Sie den folgenden Code ein:Escaping eckige Klammern in Namen des Elements, wenn das Attribut mit Equals Selector

$('[name='+temp[i][0]+']').prev().addClass('form_error');

wo Temp [i] [0] ein Array-Element den Namen eines Formularfeldes hält die enthält eckige Klammern (wie es ein Checkbox-Array darstellt), name_of_field[].

Damit dies funktioniert, weiß ich, dass ich die eckigen Klammern im Namen des Formularfelds entfliehen sollte. Da ich ein Neuling für reguläre Ausdrücke bin, kann ich es nicht richtig verstehen. Kann mir jemand den richtigen Code zur Verfügung stellen? Danke vielmals.

Antwort

3

einfach den Wert zitieren, und die Flucht der Zitat:

var name = temp[i][0]; 
name = name.split('"').join('\\"');     // Escaped " is \\" 
$('[name="'+name+'"]').prev().addClass('form_error'); 

Dieses für andere gültigen Namen erklärt auch, aber ungültige Wähler Zeichen wie $.

Wenn Sie einen RegEx wirklich verwenden möchten, im Anschluss an diese ausreichend ist (verwendet absichtlich einen Einzeiler nicht immer lesbar zu zeigen, dass Kurzcode ist):

$('[name="' + temp[i][0].replace(/"/g, '\\"') + '"]').prev().addClass('form_error'); 
//   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
+0

Dies funktioniert, aber es sollte beachtet werden, dass die Verwendung der '[' und ']' Zeichen in einem HTML-Namen oder einer ID ungültig ist (und daher nicht garantiert, dass sie weiter funktioniert): http://www.w3.org /TR/html4/types.html#type-name –

+1

@Vincent: True, sie sind nicht Standard, aber sie wurden * seit Ewigkeiten * verwendet, um Daten als "Array" an PHP zu senden. [In HTML5 kann 'name' grundsätzlich irgendeinen Wert haben, so dass es garantiert funktioniert] (http://www.w3.org/TR/html5/attributes-common-to-form-controls.html#attributes-common -to-form-controls): * "Jeder nicht leere Wert für' name' ist erlaubt, aber die Namen '_charset_ "und' isindex 'sind speziell [...]" *. –

+0

@Felix: Ich habe verschiedene RegEx-Lösungen im Internet (unter anderem bei SO) getestet, aber da meine RegEx-Fähigkeiten (noch) sehr schlecht sind, muss ich Fehler bei der Implementierung in meinem eigenen Code machen: Danke für Ihre Hilfe ich raus. Funktioniert einwandfrei :) –

0

Ich dachte, ich dies verdeutlichen könnte, wie Ich werde zweifellos wieder auf dieses Thema zurückkommen.

Das obige Problem kann am besten jedoch mit dem oben ‚regulärem Ausdruck‘ Ersatz, gelöst, wenn Sie, ein statisch benannte Element (e) wie unten für den Zugriff auf nur versuchen, dann ist hier Ihre einfache Anleitung:

<input type="text" name="mytextelement[]" /> 
<input type="text" name="mytextelement[]" /> 

<script> 
//using vanilla javascript 

document.querySelector('[name="mytextelement\[\]"]'); //gets the first element only 

document.querySelectorAll('[name="mytextelement\[\]"]'); //gets an array of above elements 

//using jQuery 

$('[name="mytextelement\[\]"]'); //gets all elements 

<script> 
Verwandte Themen