2009-04-17 23 views
19

In primo luogo, esiste un modo per utilizzare document.write() all'interno del metodo $ (document) .ready() di JQuery? Se c'è, per favore indicalo perché questo risolverà il mio problema.

Altrimenti, ho il codice di qualcuno che dovrei fare un lavoro con il mio. Il problema è che non sono autorizzato a modificare il suo codice in alcun modo. La parte che non funziona simile a questa:

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

il tag script fa riferimento una pagina aspx che fa una serie di test e poi sputa fuori qualcosa in questo modo:

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

Gli script sono solo esempi di ciò che sta realmente accadendo. Il problema qui è che ho un document.write() nello script iniziale e un document.write() nello script che viene aggiunto al primo script e devo in qualche modo farlo funzionare all'interno di $ di JQuery (document) .ready(), senza cambiare il suo codice.

Non ho idea di cosa fare. Aiuto?

risposta

41

Con i requisiti specificati, no, non è possibile utilizzare document.write senza realmente dissanguare il documento. Se sei veramente intenzionato a non modificare il codice, è possibile ignorare la funzionalità di document.write() in questo modo e virare sul risultato dopo:

var phbRequirement = ""; 

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

}); 

Assicurati di sovrascrivere la funzione document.write prima che si usa. Puoi farlo in qualsiasi momento.

Le altre risposte sono noiose, questo è divertente, ma molto più o meno nel farlo nel modo sbagliato per soddisfare i requisiti indicati.

+0

Con un piccolo ritocco, sono stato in grado di utilizzare questo approccio per risolvere il mio problema! Grazie molto. Mi hai impedito di sprecare un sacco di tempo su questo! – Kappers

3

jQuery ha un sostituto pronto per document.write. Tutto quello che devi usare è il metodo append.

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

Questo è abbastanza evidente. Ma in breve, puoi sostituire l'HTML con quello che vuoi. E il nome del tag nel metodo appendTo è il nome del tag a cui vuoi aggiungere il tuo html. Questo è tutto.

3

risposta di Picardo funziona, ma questo è più intuitivo per me:

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

Inoltre, per la parte script che è in inserita con document.write(), controlla jQuery's getScript() function

6

Picardo ha la approccio che avrei usato. Per espandere il concetto, prendere una lettura:

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

stile alternativo:

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

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

Assicurarsi di utilizzare il metodo attr per impostare tutti gli attributi dinamici. Non è necessario sfuggire a simboli speciali in questo modo.

Inoltre, non sono sicuro di quale sia l'efficacia della generazione dinamica dei tag di script; Non l'ho mai provato Tuttavia, è previsto che contengano o facciano riferimento allo script sul lato client. La mia ipotesi è che cosa restituirà page.aspx. La tua domanda è un po 'vaga su ciò che stai cercando di fare lì.

Problemi correlati