4

jQueryセレクター内で角括弧をエスケープするこれらの異なる方法の違いは何ですか?

正しい方法または間違った方法はありますか、それとも両方とも正しいですか? 私はさまざまな回答(これを含む)を読みましたが、このさまざまな方法を比較するものはありません

HTML

<div name="name[1]"></div>

jQuery

$('div[name=name[1]]'); //wrong
$('div[name="name[1]"]'); //correct?
$('div[name="name\\[1\\]"]'); //correct?
$('div[name=name\\[1\\]]'); //correct?

私が尋ねるすべてのものcorrect?は、セレクターを使用するための正しい方法/構文ですか?

編集 :

実際に投稿する前に、重複した提案された回答を読みましたが、違いや使用すべきものについて説明していません...この回答から得ました。

4

2 に答える 2

7

$('div[name=name[1]]');エラーをスローする 最初の間違ったケースunrecognized expression: div[name=name[1]]は別として、わずかに異なる理由により、他のすべてを使用しても問題ありません。

説明:

  • $('div[name="name[1]"]') jQueryはname[1]CSS/jQuery セレクターではなく文字列として扱われるため、使用しても問題ありません。だから逃げる必要はない。

  • $('div[name="name\\[1\\]"]')実際には不要なエスケープですが、動作します。jQuery は文字列として読み取りname\\[1\\]、JavaScript では最初のバックスラッシュ\が 2 番目のバックスラッシュをエスケープし\[、これは と同じ[です。したがって、この例は前の例と同じですが、不要なバックスラッシュがあります。

  • $('div[name=name\\[1\\]]') CSS/ jQuery[]セレクターと混同されないように 、内部は適切にエスケープされます。

jQueryのドキュメントから:

メタ文字 ( !"#$%&'()*+,./:;<=>?@[]^`{|}~ など) を名前のリテラル部分として使用するには、 \\ の 2 つのバックスラッシュでエスケープする必要があります。



デモはこちら

読みやすい:

于 2013-09-02T12:22:28.900 に答える
0

このようなことを試してください

        var div = document.getElementsByName('name[1]')[0];
        //now use your own way
        $(div).text();
于 2013-09-02T12:30:48.200 に答える