2

これは私のコードです:

        success: function (data) {
            var jsonData = $.parseJSON(data);
            console.log("done");
            $.each(jsonData, function(key, value) {
                if (value !== "") { console.log("working on " + "#"+key+".div")
                    $("#"+key+".div").append("<pre>"+value+"</pre>");
                }
            });
        }

ご覧のとおり、これは成功のコールバック関数の一部です。

私が提供するセレクターに値を追加する必要があるところまで、すべてが正常に機能します。しかし、なぜか何も追加されていません。

console.log("working on " + "#"+key+".div")

印刷されているので、ifステートメントが問題ではないことがわかります。

エラーは次の行にあると思います:

$("#"+key+".div").append("<pre>"+value+"</pre>"); 

しかし、何が欠けているのか正確にはわかりません。

HTML の例:

<div id="prx1.sjc.div"></div>
<div id="prx2.sjc.div"></div>
<div id="sh1.sjc.div"></div>
<div id="sh2.sjc.div"></div>
<div id="sh3.sjc.div"></div>
<div id="sh4.sjc.div"></div>
<div id="sh5.sjc.div"></div>
<div id="sh6.sjc.div"></div>
4

2 に答える 2

2

id (またはクラス) 属性でのドットの使用は、適切な方法ではありません。

次のような ID を参照する場合:

<div id="sh6.sjc.div"></div>

この方法でドットをエスケープする必要があります

$("#sh6\\.sjc\\.div")

ドットは、セレクタ構文で予約されています。リンクされた参照には次のように書かれています。

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

ドットをエスケープせずに、「sjc」と「div」の 2 つのクラスを持つ ID「sh6」のオブジェクトを選択します。

<div id="sh6" class="sjc div"></div>

ショートカット

jquery セレクターをエスケープするための興味深いショートカットは、jQuery ブログのこの記事にあります。

セレクターの確認

この問題に対処するときは、次のようなものを使用して、セレクターがいくつかの要素と一致するかどうかを確認します

console.log("Matching the id sh6.sjc.div, occurrences:"+$("#sh6\.sjc\.div").length);

使用しているセレクターの正しさを確認する方が簡単です

于 2013-09-15T16:32:18.780 に答える