我通过$ .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}}。任何人都知道我做错了什么?
提前致谢!
答案 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;
});