2009-04-17 25 views
19

En primer lugar, ¿hay alguna forma de utilizar document.write() dentro del método $ (document) .ready() de JQuery? Si lo hay, por favor, síganme porque eso resolverá mi problema.

De lo contrario, tengo el código de alguien que se supone que tengo que trabajar con el mío. El problema es que no tengo permitido alterar su código de ninguna manera. La parte que no funciona es como la siguiente:

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

la etiqueta script hace referencia a una página aspx que hace una serie de pruebas y luego escupe algo así:

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

Los scripts son solo ejemplos de lo que realmente está pasando. El problema aquí es que tengo un document.write() en el script inicial y un document.write() en el script que se adjunta al primer script y de alguna manera tengo que hacer esto dentro de $ de JQuery (document) .ready() función, sin cambiar su código.

No tengo ni idea de qué hacer. ¿Ayuda?

Respuesta

41

Con los requisitos indicados, no, no puede usar document.write sin realmente manipular el documento. Si usted está realmente decidido a no cambiar el código, puede anular la funcionalidad de document.write() de esta manera y la pegajosidad en el resultado después:

var phbRequirement = ""; 

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

}); 

Asegúrese de que las anule la función document.write antes de que se es usado. Puedes hacerlo en cualquier momento.

Las otras respuestas son aburridas, esto es divertido, pero está muy mal hacerlo por el mero hecho de cumplir con los requisitos dados.

+0

Con un pequeño ajuste, ¡pude utilizar este enfoque para resolver mi problema! Muchas gracias. ¡Me has impedido perder mucho tiempo en esto! – Kappers

3

jQuery tiene un sustituto listo para document.write. Todo lo que necesitas usar es el método de agregar.

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

Esto es bastante evidente por sí mismo. Pero, brevemente, puede reemplazarlo con cualquier html que desee. Y el nombre de la etiqueta en el método appendTo es el nombre de la etiqueta a la que desea agregar su html. Eso es.

3

funciona la respuesta de Picardo, pero esto es más intuitivo para mí:

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

Además, para la parte script que está siendo insertado con document.write(), echa un vistazo a jQuery's getScript() function

6

Picardo tiene la enfoque que hubiera usado. Para ampliar el concepto, tome una lectura:

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

estilo alternativo:

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

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

Asegúrese de utilizar el método attr para establecer los atributos dinámicos. No hay necesidad de escapar símbolos especiales de esa manera.

Además, no estoy seguro de la efectividad de la generación dinámica de etiquetas de script; Nunca lo intenté Sin embargo, se espera que contengan o hagan referencia al script del lado del cliente. Mi suposición es que devolverá page.aspx. Su pregunta es un poco vaga sobre lo que está tratando de hacer allí.

Cuestiones relacionadas