Hauke: jQuery - html-Datei lesen und davon bestimmtes <div> selektieren

Hallo,

ich versuche den Inhalt eines bestimmten <div> zu selektieren.
Im moment schaffe ich es nur die komplette .html bzw .php Datei anzusprechen

$.get("pfad/test.php", function(text){  
		$("#content").fadeOut('fast',function(){  
			$("#content_var").html(text).fadeIn('normal');  
		});  
	});

Ich versuche in der Datei "test.php" das <div> mit der id="content_var" anzusprechen und dann auf der aktuellen Seite anzufügen. Wie kann ich das mit jQuery machen?

Vielen Dank für die Hilfe.

Hauke

  1. Ich versuche in der Datei "test.php" das <div> mit der id="content_var" anzusprechen und dann auf der aktuellen Seite anzufügen. Wie kann ich das mit jQuery machen?

    Du willst also das geholte Dokument zusammenfiltern, einfacher geht das mit ajax und nicht mit get - es ist ähnlich, aber mächtiger:

    $.ajax({  
    	type: 'GET',  
    	url: '/pfad/test.php',  
    	dataType: 'text',  
    	success: function (response) {  
    		alert($('#content_var', response).text());  
    	}  
    });
    

    Nachtürlich kannst du auch #content mit #content_var ersetzen - aber du sollst auch selbst denken ;)

    Voraussetzing ist natürlich dass du ein parsbares dokument zurück bekommst dass so "aussieht" wie html/sgml/xml (dataType: 'text') oder wirklich xml ist (dataType: 'xml').

    Beides hat Vor- und Nachteile - dir würde ich allerdings zur XML-Variante raten welche fertige Codeteile liefert, die du per CDATA-Einschließst und nur noch in dein DOM einfügen musst.

    Obenstehendes ist natürlich nicht getestet.

    1. Du willst also das geholte Dokument zusammenfiltern, einfacher geht das mit ajax und nicht mit get - es ist ähnlich, aber mächtiger:

      Nachtrag: get() und ajax() sind natürlich prinzipiel dasselbe, aber $.get() ist halt nur eine verstümmelte Version (eine kurzschreibweise) für $.ajax().

      Wenn du den Request z.B. auf POST umstellen willst ziehst du Vorteile daraus und natürlich sparst du einen Funktionsaufruf.

  2. Hallo Hauke,

    aus dem Kopf und ungetestet:

    $.get("pfad/test.php", function(text){  
        $("#content").fadeOut('fast', function(){  
            var c = $(text).find('#content_var');  
            $(this).html($(c).html()).fadeIn('normal');  
        });  
    });
    

    Je nach dem wie "text" aussieht, kannst du auch ".filter(..)" statt ".find(..)" einsetzen.

    var c = $(text).filter('#content_var');

    Bitte poste nachher ob du das zum Laufen bekommen hast.

    Gruß Alexander

    1. Je nach dem wie "text" aussieht, kannst du auch ".filter(..)" statt ".find(..)" einsetzen.

      Oder wie in dem von mir genannten Beispiel oder den Kontext als 2. Parameter in der $-Funktion angeben.

      1. Je nach dem wie "text" aussieht, kannst du auch ".filter(..)" statt ".find(..)" einsetzen.

        Oder wie in dem von mir genannten Beispiel oder den Kontext als 2. Parameter in der $-Funktion angeben.

        Zur Info, $('selektor', 'html') wird intern auf $('html').find('selektor') umgeschrieben. Deine Schreibweise führt zu einem zusätzlichen Methodenaufruf, macht aber intern dasselbe.

        Mathias

        1. Zur Info, $('selektor', 'html') wird intern auf $('html').find('selektor') umgeschrieben. Deine Schreibweise führt zu einem zusätzlichen Methodenaufruf, macht aber intern dasselbe.

          Ich hätte schwören können, irgendwer hat mal gesagt, das wäre umgekehrt :)

          Danke für die Info.

  3. Hi,

    Ich versuche in der Datei "test.php" das <div> mit der id="content_var" anzusprechen und dann auf der aktuellen Seite anzufügen. Wie kann ich das mit jQuery machen?

    $('#content').load('pfad/test.php #content_var');

    http://api.jquery.com/load/

    fadeOut/fadeIn kannst du natürlich noch davor/dahinterschalten.

    Mathias

  4. Vielen Dank für die vielen Antworten!

    habe alle ausprobiert, jedoch hab ich nur die Methode

    $('#content_var').load('azubi_start.php #content_var');

    zum laufen gebracht, welche einwandfrei funktioniert.
    Kann gut sein, dass ich bei den anderen Ideen Fehler gemacht habe, konnte aber Keinen finden.

    Vielen Dank, Hauke