2012-04-08 4 views
0

を等しい次のコードを考えてみてください。角括弧(チェックボックス配列を表す)、name_of_field[]を含みます。がセレクタ

これが機能するには、フォームフィールドの名前に角括弧をエスケープする必要があります。しかし、私は正規表現の初心者であるため、正しいとは思えません。誰でも私に適切なコードを提供できますか?どうもありがとう。

答えて

3

ジャスト値を引用し、引用符をエスケープ:

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

これは、他の有効な名前を占め、そのような$無効としてセレクタ文字。

あなたが本当に正規表現を使用したい場合は、この次は(故意にショートコードは常に読み取れないことを示すために、ワンライナーを使用)で十分です:

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

これはうまくいきますが、HTML名またはIDに '['と ']'文字を使用すると無効です(したがって、動作を保証するものではありません)。http://www.w3.org /TR/html4/types.html#type-name –

+1

@Vincent:これは標準ではありませんが、データをPHPに「配列」として送信するために*使用されています。 [HTML5では、 'name'は基本的に任意の値を持つことができるため、動作することが保証されています](http://www.w3.org/TR/html5/attributes-common-to-form-controls.html#attributes-common -to-form-controls):* '' name'の空でない値は許されますが、 "_charset_"と "isindex"という名前は特別な[...] "*です。 –

+0

@Felix:インターネットで見つかった様々なRegExソリューションを試しましたが(うちのいくつかはSOの中にあります)、私のRegExのスキルは非常に悪いので、私は自分のコードでそれらを実装しなければなりませんでした。私を出す。作品は完璧に:) –

0

私のように、私はこれを明確かもしれないと思いました私は間違いなく再びこの問題に戻るだろう。

<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> 

上記の問題は、最高のあなただけの以下のような静的という名前の要素(複数可)にアクセスしようとしている場合は、ここにあなたの簡単なガイドである、しかし、上記の「正規表現」の交換で解決することができます