2

編集

すべてのコメントと回答に感謝します。私は困惑しています。さまざまな回答を試した後、問題を解決できましたが、今は問題を再現できません??? 何が起こったのかわからない。

私がやろうとしているのは、id で要素を取得することですが、id は XML ドキュメントの「パス」であるため、この id には複数のドットが含まれています。だから、エスケープしたとしてもID名に複数のドットがあるとうまくいかないと思いますか?

var triggerElementID = "a.b.c.d";
var eleId = triggerElementID.replace(/\./g, "\\\\.");
console.log(eleId);
var thisele = $('#' + eleId);
console.log(thisele);

上記のコードは私が持っているもので、ドットをエスケープします.console.logはこれを出力しa\\.b\\.c\\.d、console.logはこれをthisele出力します

[prevObject: b.fn.b.init[1], context: document, selector: "#a.b.c.d", jquery: "1.9.1", constructor: function…]
context: document
length: 0
prevObject: b.fn.b.init[1]
selector: ""#a.b.c.d"
__proto__: Object[0]
4

3 に答える 3

3

この問題に遭遇したとき、これを使用できました:

$("[id='" + eleId +"']");

http://jsfiddle.net/tmw63/

于 2013-10-10T16:35:41.623 に答える
1

jQuery はsizzle.js CSS3 セレクター エンジンを使用します。a.b.c.dこれは、それらを連鎖セレクターに変換し.、クラスの伝統的な意味を取り入れます。したがって、次と同等になります。

a with [a class of] b [and a class of] c [and a class of] d

現在、sizzle、したがって jQuery は、エスケープされたセレクターがサポートされていることを意味します (こちらを参照) が、2 つのバックスラッシュでエスケープする必要があります。( \\)

a.b.c.dエスケープしようとしても、jQuery がまだセレクターであると言っている場合、正規表現に問題がある可能性があります。

-> var triggerElementID = "a.b.c.d";
-> var eleId = triggerElementID;//.replace(/\./g, "\\\\.");
undefined
-> eleId
"a.b.c.d"

開発者コンソールでテストすると、この理論もサポートされます。

編集:上記のコードで .replace() 呼び出しがコメントアウトされていることを確認できませんでした。コメントを外すと正しく動作します...

于 2013-10-10T16:35:28.607 に答える
0

置換文字列にスラッシュが多すぎます。

var triggerElementID = "a.b.c.d";
var eleId = triggerElementID.replace(/\./g, "\\.");
var thisele = $("#"+eleId);
console.log(thisele);

フィドル

于 2013-10-10T16:37:13.583 に答える