Frage

Ich mache einen $.get Aufruf an meine db und es gibt einige HTML (data):

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

Der HTML-es gibt so etwas wie folgt aus:

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

In meiner Callback-Funktion, ich versuche, eine Klasse, um es hinzuzufügen (basierend auf einigem conditionals dass ich getestet habe erfolgreich erreicht wird) wie folgt:

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

Auch wenn someCondition wahr ist, mein HTML ist die mynewclass[someId] Klasse, um es nicht zu haben hinzugefügt. Gibt es einen Grund, warum dies sein kann, dass ich nur dummerweise mit Blick auf?

Danke ...: \

Bearbeiten

Hier ein Link zu einem reproduzierbaren Beispiel. Es ist nicht genau, was ich per se mach (ich bin kein var außen mit meinen Daten zu bekommen, aber ich bin den gleichen Effekt reproduzieren). Beachten Sie, wie es für den Test ‚falsch‘ ist zeigt.

War es hilfreich?

Lösung

Das Problem ist, dass Sie mehrere div Objekte erstellen. Die erste von Ihnen erstellte verworfen werden. Dann wird ein neuer geschaffen, die nicht die Klasse hat, die zuvor hinzugefügt wurde.

Halten Sie sich an eine Referenz des div, die zuerst erstellt wurden und zu dem die Klasse angewandt. Dann fügen Sie das gleiche div auf der Seite.

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

Aber jetzt haben wir es mit einem Objekt (div) und kein String, und zu versuchen, ein Objekt in eine Zeichenfolge zu konvertieren "[object Object]" ergeben. So ändern Sie die Append-Funktion folgt aus:

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

Ihr Beispiel aktualisiert .

Andere Tipps

jQuery wie roher Javascript funktioniert auf DOM. Und was machst du, versucht, auf Daten (HTML, so lange Zeichenfolge in Ihrem Fall) zu manipulieren. Sie müssen atleast Hinzufügen von HTML-Daten, die Sie DOM angefordert, bevor Sie mit ihm tun Tricks starten. Ihr Rückruf sollte in etwa so sein ..

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);
}

[EDIT]

@Anurag Es ist wahr, dass jQuery ist in der Lage Strings Daten zu manipulieren, aber es ist nicht wahr, dass ich der Fall mit Nicht-ID-Transaktionen.

Sie können sehen,

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' ist in DOM_STR1, gleiche Art und Weise 'p' ist in DOM_STR2. Warum jQuery kann nicht das Umschlingungselement lesen, findet aber Kinder von String ??

Also, wenn Daten ohnehin auf DOM sein muß, es macht keinen Sinn, sie zu manipulieren von String.

@ Jason: mein Punkt das ist, müssen Sie .addClass auf einem jQuery-Objekt verwenden, nicht roh HTML. Oder Sie müssen Muster Spiel ‚data‘, als String behandeln (was es ist) und spritzen Sie Ihre Klasse in das Klassenattribut.

„Daten“ Variable bezieht sich auf die gesamte Sammlung von zurückgegebenen Informationen. So etwas sollte funktionieren:

if(someCondition) { $(data).find('#1234').addClass('mynewclass'+someId); }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top