ID に が含まれている場合、jQuery セレクターは ID を選択できません.
。
私のアプリケーションID名では、ユーザー名から動的に生成されます。
jQueryセレクターがうまく機能するように、タグIDから特殊文字をエスケープするにはどうすればよいですか?
たとえば、ID1: This.Is.ID.1
ID2:This.is.Another.ID
誰でも私を助けることができますか?
前もって感謝します。
ID に が含まれている場合、jQuery セレクターは ID を選択できません.
。
私のアプリケーションID名では、ユーザー名から動的に生成されます。
jQueryセレクターがうまく機能するように、タグIDから特殊文字をエスケープするにはどうすればよいですか?
たとえば、ID1: This.Is.ID.1
ID2:This.is.Another.ID
誰でも私を助けることができますか?
前もって感謝します。
私が正しく理解している場合、ピリオドを含む文字列を変更して、すべてのピリオドの前に \\ を付け、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 式は最初のもの.
を次のように置き換えるだけです。\\.
編集\\\\.
コードを試してみましたが、置換値をに
変更する必要があるようです\\.
公式の 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" ) )
jQuery のドキュメントには、エスケープするために 2 つのバックスラッシュが使用されていると記載されています。
だからあなたの例は使用します$("#This\\.Is\\.ID\\.1")
実際には、id から . をリモートにする必要はありません。セレクター内の特殊文字をエスケープするだけです。たとえば、次の要素を選択するには:
<div id='foo.bar'></div>
...使用できます:
$('#foo\\.bar');