使用jQuery遍历$ .get()的结果

时间:2010-12-16 00:04:08

标签: jquery ajax traversal

我通过$ .get()加载一些HTML;我只想将结果的某些部分插入到我的html中。所以SO搜索了this questions,然后尝试了这个:

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

虽然result的内容正确console.log(content),但[]会返回{{1}}。任何人都知道我做错了什么?

提前致谢!

4 个答案:

答案 0 :(得分:4)

如果您尝试按照自己的意思行事,.load()会更容易:

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

  return false;
});

答案 1 :(得分:0)

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;
});

答案 2 :(得分:0)

jQuery调用的第二个参数必须是元素,文档或jQuery对象。您正在发送一个字符串,因此它不适合任何有效参数集。我不确定jQuery如何对无效参数做出反应,但我认为它只是忽略了字符串并在当前文档中查找选择器。

通过将字符串发送到jQuery函数将字符串转换为元素:

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

请注意,它通过创建div元素并将字符串设置为innerHTML将字符串转换为元素,因此字符串必须是HTML片段,而不是完整的HTML文档。

答案 3 :(得分:0)

我建议在Dave Ward提到时使用.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;
});