Обход результата $ .get () с помощью jQuery - PullRequest
1 голос
/ 16 декабря 2010

Я загружаю HTML через $ .get (); Я только хочу, чтобы некоторые части результата были вставлены в мой HTML. Поэтому поиск SO нашел этот вопрос , а затем попытался это:

$("a.load").click(function() {
  $.get(this.href, {}, function(result) {
    content = $("#main", result);
    console.log(content);
  }, "html");
  return false;
});

Хотя result имеет правильное содержимое console.log(content) возвращает []. Кто-нибудь знает, что я делаю не так?

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 16 декабря 2010

Если вы пытаетесь сделать то, что звучит как вы, .load () будет проще:

$("a.load").click(function() {
  $("#WhereYouWantHTMLInjected").load(this.href + ' #main');

  return false;
});
0 голосов
/ 16 декабря 2010

Я рекомендую использовать .load (), как упоминал Дэйв Уорд.

Если бы вы использовали собственный обратный вызов в $ .get (), вам нужно было бы сделать что-то вроде этого (концепция прямо из источника jQuery):



$("a.load").click(function() {
  $.get(this.href, {}, function(result) {
    var content = $("<div>")
      // inject the contents of the document in, removing the scripts
      // to avoid any 'Permission Denied' errors in IE
      .append(result.responseText.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, ""))
      // Locate the specified elements
      .find("#main").html();

    console.log(content);
  }, "html");
  return false;
});

0 голосов
/ 16 декабря 2010

Второй параметр в вызове jQuery должен быть элементом, документом или объектом jQuery. Вы отправляете строку, поэтому она не соответствует никакому набору допустимых параметров. Я не уверен, как jQuery реагирует на недопустимые параметры, но я думаю, что он просто игнорирует строку и вместо этого ищет селектор в текущем документе.

Превратить строку в элементы, отправив ее в функцию jQuery:

content = $("#main", $(result));

Обратите внимание, что он превращает строку в элементы путем создания элемента div и устанавливает строку как innerHTML, поэтому строка должна быть фрагментом HTML, а не полным документом HTML.

0 голосов
/ 16 декабря 2010

Строка content = $("#main", result); кажется неправильной. Второй аргумент простого выражения jQuery - это видимость - вы даете ему HTML, и я подозреваю, что он не знает, что с этим делать. Возвращает пустой массив jQuery.

Если вы хотите использовать jQuery для анализа полученного html, вы должны добавить его к элементу, а затем работать с ним. Итак:

$("a.load").click(function() {
  $.get(this.href, function(result) {
    content = $("<div>").html(result);
    // now content is a new jQuery element to do with as you please
    // it's not in the DOM yet, mind you
    var links = content.find("a");    // maybe you want the resulting links?
    $("#main").append(links);         // maybe you want to add them to the DOM?
  }, "html");
  return false;
});
...