2009-08-02 9 views
0

Ich habe meine Website einen Wert als Folge eines Ajax-Aufrufs erhalten. Danach möchte ich dieses Ergebnis (eine Zeichenkette) in ein Tag einfügen. Allerdings möchte ich dieses Ergebnis so einfügen, dass (1) es eine Opazität = 0 haben muss, dann (2) slideDown(), so dass die gesamte Inhaltsliste mit Animation nach unten geschoben wird und schließlich (3) die Deckkraft ändert = 1. Stellen Sie sich vor, dies ist wie eine Facebook-Nachrichtenliste einfügen ProzessWählen Sie Tags innerhalb einer Zeichenfolge mit jQuery

Die Art, wie ich dies tun möchte, ist die Ergebniszeichenfolge von AJAX zu Opazität = 0 zuerst. Ich weiß jedoch nicht, wie man mit jQuery ein Tag innerhalb einer Zeichenkette auswählt. Ich kenne jQuery nur aus dem DOM auswählen. Also, wie geht das? Irgendein Rat?

Dank

+0

Was meinen Sie mit "Tag"? –

+0

posten Sie bitte Ihr HTML-Snippet – pixeline

+0

OK, lassen Sie dieses Experiment machen. Die Rückgabevariable ist str = string. Nehmen wir an, die Rückgabe des Wertes liegt unter var str = " bb "; Nun möchte ich #aa von dieser str verstecken, aber es funktioniert nicht: $ (str) .find ('# aa'). Hide(); msgList.html (str + originalHtml); Das Ergebnis in msgList zeigt immer noch "aa" –

Antwort

0

ausblenden() ist eine jQuery-Funktion, was bedeutet, dass nur auf einem Jquery-Objekt arbeitet, so müssen Sie zunächst die HTML im DOM, injizieren und dann verstecken() aufrufen, auf dem Element DOM.

$('#msgList').load (url,data,function(html){ 
var $this = $(this); // cache $(this) for performance 
$this.hide().html(html); // inject the html in the DOM 
$('#aa', $this).hide(); // hide #aa 
$this.show(); // reveal the messageList 
}); 
+0

Ich benutze keine Funktion laden, aber ich benutze Ajax-Funktion Nicht sicher, was $ das oben bedeuten. Ich habe das versucht und funktioniert nicht var str = " bb "; $ (str) .find ('# aa'). Hide(); msgList.html (str + originalHtml); –

+0

$ Dies ist nur ein Cache-Verweis auf den Container. Seither traversiere ich das DOM, um seine Eltern zu erreichen ($ (this) .parent()) was auch immer als nächstes kommt, zeigt "this" auf den Elternteil des Containers, nicht auf den Container selbst. Das $ dient dazu, das zu lösen. – pixeline

+0

Ich habe meine Antwort entsprechend Ihrer aktualisierten Frage geändert. – pixeline

0

Im Folgenden wird der Ajax-Aufruf mit dem einfachen .get() -Wrapper erfolgen.

Dann lädt die Callback-Funktion die Antwort in ein jquery-Objekt und sucht das gewünschte Tag.

Es verbirgt dann dieses Tag und fügt es an einen div-Container an.

Schließlich wird es nach unten schieben.

//do ajax call 
$.get(url, function(html) { 

    //load html into a jQuery object, find the tag by id then hide it 
    var $el = $(html).filter('#someId').hide(); 
    //append element to the dom and slide it down 
    $el.appendTo('#someDiv').slideDown('slow'); 

}); 
+0

Ich versuchte dies und #aa ist nicht versteckt, wenn zurück var str = " bb "; $ (str) .find ('# aa'). Hide(); msgList.html (str + originalHtml); –

+0

In diesem Fall wird .filter nicht gefunden. – redsquare

0

Ich würde in Erwägung ziehen, den Rückgabewert in einen SPAN zu setzen. Verstecken Sie den Container, der ihn enthält. Setzen Sie die Deckkraft des SPAN auf 0, fügen Sie dann das Ergebnis hinzu und legen Sie es in den Container. Sobald dies erledigt ist, schieben Sie den Container nach unten und animieren Sie die Anzeige des Ergebnisses im Callback der slideDown-Methode.

$.ajax({ 
    ... 
    success: function(data) { 
     var container = $('#container').hide(); 
     $('<span />').css('opacity', 0) 
         .html(data.result) 
         .appendTo(container); 
     container.slideDown('normal', function() { 
         $(this).('span:first') 
           .animate({ 'opacity': 1.0 }); 
        }); 
    } 
    ... 
}); 
+0

Ich versuche, die DOM-Struktur nicht zu ändern, da es andere Javascript-Funktion gibt, die an dieser Struktur arbeitet und sicherstellen muss, dass es dasselbe wie Rückkehr ist. –

Verwandte Themen