1

複数の行をテーブルに追加する jQuery ループがあります。行数は実行時に変更される可能性があるため、行 ID は動的に生成されます。

$("#tableBody")
    .append($("<tr>")
        .attr('id','row-icon' + currentID)...

後で、これらの追加された行にアクセスする必要があります。ただし、値にcurrentID「+」記号が含まれている場合、行要素にアクセスしようとすると「未定義」エラーが発生します。

たとえば、以下の行currentIDは が「1」の場合に機能しますが、ID が「vm+1」の場合は機能しません。

var testID = $("#row-icon" + currentID).attr("id");

余分な「+」記号を「エスケープ」する簡単な解決策がありませんか?

ここでの作業例。

編集: ID はサードパーティから送信されていることに注意してください。そのため、「+」記号を削除することはできません。

4

3 に答える 3

6

ドキュメントで説明されて+いるように、記号はjQueryのセレクターのいわゆるメタ文字であるため、機能しません。2 つのバックスラッシュを使用してエスケープする必要があります。

メタ文字 ( !"#$%&'()*+,./:;<=>?@[\]^`{|}~ など) を名前のリテラル部分として使用するには、 2 つのバックスラッシュでエスケープする必要があります: \\. たとえば、id="foo.bar" を持つ要素は、セレクター $("#foo\\.bar" を使用できます)。W3C CSS 仕様には、完全なセットが含まれています。有効な CSS セレクターに関するルールの説明. 識別子の CSS 文字エスケープ シーケンスに関する Mathias Bynens によるブログ エントリも役立ちます。

したがって、あなたの場合は、次のようにします ( jsFiddleを参照):

var test = $("#expand-icon" + currentID.replace(/\+/g, '\\+')).attr("src");
var testID = $("#row-icon" + currentID.replace(/\+/g, '\\+')).attr("id");
于 2013-08-13T14:07:42.233 に答える