2009-04-17 17 views
19

Erstens, gibt es eine Möglichkeit, document.write() innerhalb der $ (document) .ready() - Methode von JQuery zu verwenden? Wenn ja, bitte klicke mich an, denn das wird mein Problem lösen.

Ansonsten habe ich jemand Code, den ich mit meiner arbeiten soll. Der Haken ist, dass ich seinen Code in keiner Weise ändern darf. Der Teil, der sieht nicht so etwas funktioniert:

document.write('<script src=\"http://myurl.com/page.aspx?id=1\"></script>'); 

Der script-Tag verweist auf eine Aspx-Seite, die eine Reihe von Tests tut und dann spuckt etwas wie so:

document.write('<img src=\"/image/1.jpg\" alt=\"Second image for id 1\">') 

Die Skripte sind nur Beispiele dafür, was tatsächlich vor sich geht. Das Problem hier ist, dass ich ein document.write() im ersten Skript und ein document.write() im Skript habe, das an das erste Skript angehängt wird, und ich muss irgendwie dafür sorgen, dass dies innerhalb von JQuery $ funktioniert (Dokument) .ready() -Funktion, ohne seinen Code zu ändern.

Ich habe keine Ahnung, was zu tun ist. Hilfe?

Antwort

41

Mit den Anforderungen, nein, können Sie nicht document.write verwenden, ohne wirklich das Dokument zu verschütten. Wenn Sie wirklich gebogen sind auf den Code nicht ändern, können Sie die Funktionalität von document.write() außer Kraft setzen, wie so und Tack auf das Ergebnis später:

var phbRequirement = ""; 

$(function() { 
    document.write = function(evil) { 
    phbRequirement += evil; 
    } 
    document.write("Haha, you can't change my code!"); 
    $('body').append(phbRequirement); 

}); 

Achten Sie darauf, die Funktion document.write, bevor es überschreiben wird eingesetzt. Sie können es jederzeit tun.

Die anderen Antworten sind langweilig, das macht Spaß, aber es ist ziemlich falsch, um die gestellten Anforderungen zu erfüllen.

+0

Mit ein wenig Feinabstimmung konnte ich diesen Ansatz nutzen, um mein Problem zu lösen! Danke vielmals. Sie haben mich davon abgehalten, viel Zeit damit zu verschwenden! – Kappers

3

jQuery hat einen fertigen Ersatz für document.write. Alles, was Sie brauchen, ist die Append-Methode.

jQuery('<img src=""/>').appendTo('body'); 

Dies ist ziemlich selbstverständlich. Aber kurz, können Sie das mit was auch immer HTML Sie ersetzen möchten. Und der Tag-Name in der appendTo-Methode ist der Name des Tags, an den Sie den HTML-Code anhängen möchten. Das ist es.

3

picardo Antwort funktioniert, aber das ist mehr intuitiv für mich:

$("body").append('<img src=\"/image/1.jpg\" alt=\"Second image for id 1\">'); 

Auch für das Skript Teil, der mit document.write() eingeführt wird Besuche jQuery's getScript() function

6

picardo das hat Ansatz hätte ich verwendet. Um das Konzept zu erweitern, nehmen Sie eine Lese:

$('<script/>') 
    .attr('src', 'http://myurl.com/page.aspx?id=1') 
    .appendTo('body'); 

Alternative Stil:

var imgnode = $('<img alt="Second image for id 1"/>') 
    .attr('src', "image1.jpg"); 

$('#id1').append(imgnode); 

unbedingt die attr Methode verwenden, um alle dynamischen Attribute zu setzen. Keine Notwendigkeit, spezielle Symbole auf diese Weise zu entkommen.

Auch bin ich nicht sicher, was die Wirksamkeit der dynamischen Generierung von Skript-Tags; Ich habe es nie versucht. Es wird jedoch erwartet, dass sie clientseitiges Skript enthalten oder darauf verweisen. Meine Annahme ist, dass was page.aspx zurückgeben wird. Ihre Frage ist ein wenig vage darüber, was Sie dort zu tun versuchen.

Verwandte Themen