我想通过一个加载了ajax的文件循环,但是它不会循环,我尝试了几件事但是我无法让它工作。
// jquery
$.ajax({
url: 'file.html',
type: "GET",
dataType: "html",
success: function(data) {
$(data).find('div').each(function(i){
alert('found')
});
},
error: function(){
alert('oeps...')
}
});
// file.html
<div>
// content goes here
</div>
<div>
// content goes here
</div>
<div>
// content goes here
</div>
...
...
答案 0 :(得分:2)
您需要将.find
更改为.filter
。这是因为.find
搜索了所有元素的 children 后代,但由于你的html文件只是<div>
s,你需要使用.filter
来查找它们
答案 1 :(得分:1)
您不需要指定html
作为数据类型,不需要它。
SO,删除以下一行。
dataType: "html"
答案 2 :(得分:1)
不起作用的原因是因为.find在数据中查找后代,所有这些div都在根。
您可以创建一个空div,然后将该div的html设置为您的数据。这将确保查找工作,因为div将成为后代。
$.ajax({
url: 'file.html',
type: "GET"
success: function(data) {
$('<div/>').html(data).each(function(index, item) {
console.log(item);
});
},
error: function(){
console.log('error')
}
});
或者您可以使用过滤器。
$.ajax({
url: 'file.html',
type: "GET"
success: function(data) {
$(data).filter('div').each(function(index, item) {
console.log(item);
});
},
error: function(){
console.log('error')
}
});
答案 3 :(得分:0)
很难知道你想要做什么,但我猜是这样的:
$.ajax({
url: 'file.html',
type: "GET"
success: function(data) {
$.each($('div', data.outerHTML), function(index, item) {
console.log(item);
});
},
error: function(){
console.log('error')
}
});
答案 4 :(得分:0)
在这种情况下,.find()
不起作用,因为您搜索的HTML不包含任何div
子节点。要解决此问题,请先将项目附加到某个容器,然后使用.find()
。
http://jsfiddle.net/jbabey/hvkw9/1/
var html = $('<div>first div</div><br /><div>second div</div>');
// 0, no child divs in html
console.log(html.find('div').length);
// 2, now the divs in html are children of an intermediate div
console.log($('<div>').append(html).find('div').length);