JQuery $ (document) .ready () и document.write () - PullRequest
21 голосов
/ 17 апреля 2009

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

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

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

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

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

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

Понятия не имею, что делать. Помощь

Ответы [ 4 ]

41 голосов
/ 17 апреля 2009

При заданных требованиях нет, вы не можете использовать 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 перед ее использованием. Вы можете сделать это в любое время.

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

6 голосов
/ 17 апреля 2009

у Пикардо есть подход, который я бы использовал. Чтобы расширить концепцию, прочитайте:

$('<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 вернется. Ваш вопрос немного расплывчат в отношении того, что вы пытаетесь сделать там.

3 голосов
/ 17 апреля 2009

ответ Пикардо работает, но для меня это более интуитивно понятно:

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

Кроме того, для части скрипта, которая вставляется с document.write (), проверьте функцию getScript () jQuery

3 голосов
/ 17 апреля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...