如何从jQuery.ajax()过滤返回的数据?
当使用jQuery.ajax()
方法时,我正在努力过滤返回的数据以获得我需要的数据。 我知道使用.load()
和其他jQuery AJAX方法很容易,但我需要特别使用.ajax()
。
例如,我知道这是有效的;
var title = $(data).filter('title'); // Returns the page title
但是,如果我只想要id =“foo”的div的内容呢?
var foo = $(data).filter('#foo'); // None of these work
var foo = $(data).find('#foo'); //
var foo = $('#foo', data); //
理想情况下,我希望有一种方法可以传递一个普通的jQuery选择器,这可以用于选择标题,div或jQuery可以选择的任何其他元素。 这样我就可以将任何字符串传入我自己的ajax函数 - 例如;
myApp.ajax({
url: 'myPage.html',
filterTitle: 'title',
filterContent: '#main-content'
});
任何帮助将不胜感激。
filter()
和find()
取决于检索到的HTML页面的结构。 例如,如果这是检索的页面:
<!DOCTYPE html>
<html>
<head>
<title>Foo</title>
</head>
<body>
<div id="wrap">
<div id="header">
<h1>Foo</h1>
</div>
<div id="body"> content </div>
</div>
<div id="tooltip"> tooltip </div>
</body>
</html>
如果你想选择顶层元素= <body>
直接子元素 - 在这个例子中: #wrap
或#tooltip
- 那么你必须使用filter()
。
如果你想选择其他元素 - 在这个例子中: #header
, <h1>
, #body
,... - 那么你必须使用find()
。
我不知道你的元素是否是<body>
的孩子,你可以使用这个“hack”:
$("<div>").html(data).find( selector );
通过使用这个解决方法,你总是通过find()
获取元素。
jQuery.load
方法使用以下代码:
// If successful, inject the HTML into all the matched elements
if ( status === "success" || status === "notmodified" ) {
// See if a selector was specified
self.html( selector ?
// Create a dummy div to hold the results
jQuery("<div />")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
.append(res.responseText.replace(rscript, ""))
// Locate the specified elements
.find(selector) :
// If not, just inject the full result
res.responseText );
}
即它将完整的响应追加到它创建的DIV,然后使用find(selector)
。
所以你应该看看像这样的东西:
var foo = $('<div />').html(data).find('#foo'); // This looks like it'll work!
从jQuery的角度来看,这是一个黑客技术!
这就是我能够通过@Matt得到它的工作原理
$.ajax({
type: "GET",
url: url,
dataType: 'html',
success: function(data) {
$('#foo').html(
$('<div />').html(data).find('#foo').html()
);
}
});
链接地址: http://www.djcxy.com/p/77503.html