2

$.getdbを呼び出すと、HTML()が返されますdata

$.get(url, null, function(data) {

返されるHTMLは次のようなものです。

<div id="1234" class="myclass">..more html..</div>

私のコールバック関数では、次のようにクラスを追加しようとしています(テストしたいくつかの条件に基づいて正常に到達しています)。

if (someCondition) $(data).addClass('mynewclass' + someId);

trueの場合でもsomeCondition、私のHTMLにはmynewclass[someId]クラスが追加されていません。これが私が愚かに見落としているという理由があるのでしょうか?

ありがとう... :\

編集

再現可能な例へのリンクは次のとおりです。それ自体が正確に行っていることではありません(データを取得するために外部の変数を使用していませんが、同じ効果を再現しています)。テストで「false」がどのように表示されているかに注目してください。

4

4 に答える 4

3

生のJavaScriptのようなjQueryはDOMで機能します。そして、あなたがしていることは、データ(あなたの場合は長い文字列としてのHTML)を操作しようとしています。トリックを開始する前に、少なくともDOMに要求したHTMLデータを追加する必要があります。コールバックは次のようになります。

function(data){
  $('#container_to_fit_data').html(data); // Adding to Document
  someId = 1234;
  if (someCondition) 
      $('#'+someId, '#container_to_fit_data').addClass('mynewclass' + someId);
      // or lets see it in simplest form
      // $('#container_to_fit_data').find('#'+someId).addClass('mynewclass' + someId);
}

[ 編集 ]

@Anurag jQueryが文字列データを操作できることは事実ですが、非IDトランザクションの場合は真実ではありません。

あなたが見ることができます、

DOM_STR1 = "<div>
              <p>
                 <strong>Strong</strong>
                 <span class='myclass'>Span</span>
              </p>
            </div>"

DOM_STR2 = "<p>
              <strong>Strong</strong>
              <span class='myclass'>Span</span>
            </p>"


$('span.myclass', DOM_STR1) // We find span. Allright.
$('span.myclass', DOM_STR2) // We find span. Cool.

$('p', DOM_STR1) // We find p too. But..
$('p', DOM_STR2) // Empty. Never return p, Why??
$('div', DOM_STR1) // Empty Again. Why??

「div」はDOM_STR1に存在し、「p」はDOM_STR2に存在します。jQueryがラッピング要素を読み取れないのに、文字列から子を見つけるのはなぜですか?

したがって、データがDOM上にある必要がある場合、文字列からデータを操作することは意味がありません。

于 2010-08-31T18:37:00.687 に答える
3

問題は、複数のdivオブジェクトを作成していることです。最初に作成しているものは破棄されています。次に、以前に追加されたクラスを持たない新しいクラスが作成されます。

最初に作成され、クラスが適用されたdivの参照を保持します。次に、同じdivをページに追加します。

function(something) {
    var div = $(data).addClass('someClass');
    $('#container').html(div + div.is('.someClass'));
}

ただし、ここでは文字列ではなくオブジェクト(div)を処理しているため、オブジェクトを文字列に変換しようとすると、が生成され"[object Object]"ます。したがって、これに追加機能を変更します。

$('#container').empty();
$('#container').append(div).append(String(div.is('.someClass')));

更新された例を参照してください

于 2010-08-31T18:58:41.023 に答える
1

@ジェイソン:それが私のポイントです。生のHTMLではなく、jQueryオブジェクトで.addClassを使用する必要があります。または、パターンマッチ'data'を文字列として扱い、クラスをクラス属性に挿入する必要があります。

于 2010-08-31T18:38:01.027 に答える
0

「data」変数は、返された情報のコレクション全体を指します。このようなものが機能するはずです:

if(someCondition) { $(data).find('#1234').addClass('mynewclass'+someId); }
于 2010-08-31T18:38:43.773 に答える