9

ID に が含まれている場合、jQuery セレクターは ID を選択できません.
私のアプリケーションID名では、ユーザー名から動的に生成されます。

jQueryセレクターがうまく機能するように、タグIDから特殊文字をエスケープするにはどうすればよいですか?

たとえば、ID1: This.Is.ID.1 ID2:This.is.Another.ID

誰でも私を助けることができますか?

前もって感謝します。

4

5 に答える 5

16

私が正しく理解している場合、ピリオドを含む文字列を変更して、すべてのピリオドの前に \\ を付け、jQuery セレクターで ID としてサポートされるようにします。その方法は次のとおりです。

var username = 'some.username.with.dots';

// Replace all periods with \\. to 
username = username.replace(/\./g, '\\\\.');

// find element that matches #some\\.username\\.with\\.dots
$('#' + username).doSomethingWithjQuery();
  • .\は正規表現で「任意の文字」を意味するため、前に置いてエスケープする必要があります。
  • 正規表現修飾子は貪欲を意味します。gそれがなければ、replace 式は最初のもの.を次のように置き換えるだけです。\\.

編集\\\\.コードを試してみましたが、置換値をに 変更する必要があるようです\\.

JS コンソール

于 2013-10-25T18:11:08.257 に答える
12

公式の jQuery FAQ には、まさにその質問があります: CSS 表記で使用される文字を含む ID で要素を選択するにはどうすればよいですか? 彼らはあなたが逃げるのを助ける機能さえ持っています。それを引用:

... コロン (" :") とピリオド (" .") は、それぞれ疑似クラスとクラスを示しているため、jQuery セレクターのコンテキスト内では問題があります。

これらの文字を CSS 表記としてではなく文字どおりに扱うように jQuery に指示するには、文字の前に 2 つのバックスラッシュを配置して「エスケープ」する必要があります

// Does not work:
$( "#some:id" )
 
// Works!
$( "#some\\:id" )
 
// Does not work:
$( "#some.id" )
 
// Works!
$( "#some\\.id" )

次の関数は、これらの文字をエスケープし、ID 文字列の先頭に「#」を配置します。

function jq( myid ) {
    return "#" + myid.replace( /(:|\.|\[|\]|,|=)/g, "\\$1" );
}

関数は次のように使用できます。

$( jq( "some.id" ) )
于 2013-10-25T18:21:30.640 に答える
1

(2 つのバックスラッシュ) を使用\\して、特殊文字をエスケープします。

$('#this\\.something')

フィドル

于 2013-10-25T18:15:59.057 に答える
0

jQuery のドキュメントには、エスケープするために 2 つのバックスラッシュが使用されていると記載されています。

だからあなたの例は使用します$("#This\\.Is\\.ID\\.1")

于 2013-10-25T18:14:43.207 に答える
-1

実際には、id から . をリモートにする必要はありません。セレクター内の特殊文字をエスケープするだけです。たとえば、次の要素を選択するには:

<div id='foo.bar'></div>

...使用できます:

$('#foo\\.bar');
于 2013-10-25T18:12:55.573 に答える