2009-04-17 5 views
19

Во-первых, существует ли способ использования document.write() внутри метода $ (document) .ready() JQuery? Если есть, пожалуйста, подскажите мне, потому что это решит мою проблему.

В противном случае у меня есть чей-то код, который я должен выполнять с моим. Уловка в том, что мне не разрешается каким-либо образом изменять его код. Та часть, которая не работает выглядит примерно так:

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

тег скрипт, ссылающаяся страницу ASPX, которая делает серию тестов, а затем выплевывает что-то вроде так:

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

скриптов являются лишь примерами того, что происходит на самом деле. Проблема здесь в том, что у меня есть document.write() в исходном скрипте и document.write() в скрипте, который добавляется к первому скрипту, и мне нужно каким-то образом сделать эту работу в JQuery $ (document) .ready(), не меняя его код.

Я понятия не имею, что делать. Помогите?

ответ

41

С учетом требований, нет, вы не можете использовать document.write, не запустив документ. Если вы действительно согнуты на не меняя код, можно переопределить функциональность document.write(), как так и липкости на результат позже:

var phbRequirement = ""; 

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

}); 

Убедитесь, что вы перезаписать функцию document.write перед ним используется. Вы можете сделать это в любое время.

Остальные ответы скучны, это весело, но очень многое делает это неправильно, ради удовлетворения требований.

+0

С небольшой настройкой, я смог использовать этот подход для решения моей проблемы! Большое спасибо. Ты заставил меня тратить много времени на это! – Kappers

3

jQuery имеет готовую замену document.write. Все, что вам нужно использовать, - это метод добавления.

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

Это довольно очевидно. Но вкратце, вы можете заменить его любым html, который вы хотите. И имя тега в методе appendTo - это имя тега, к которому вы хотите добавить свой html. Вот и все.

3

ответ Picardo работает, но это более интуитивным для меня:

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

Кроме того, для части сценария, который вставляется в document.write(), проверить jQuery's getScript() function

6

Picardo имеет подход, который я бы использовал. Для того, чтобы расширить концепцию, принять прочитанный:

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

Альтернативный стиль:

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

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

Обязательно используйте метод attr устанавливать какие-либо динамические атрибуты. Нет необходимости избегать специальных символов.

Кроме того, я не уверен, какова эффективность динамически генерирующих тегов сценариев; Я никогда не пробовал. Хотя ожидается, что они содержат или ссылаются на клиентский скрипт. Мое предположение - то, что вернется page.aspx. Ваш вопрос немного расплывчатый о том, что вы пытаетесь сделать там.