jquery ajax无法通过找到的数据循环

时间:2012-05-14 19:18:32

标签: javascript jquery ajax each

我想通过一个加载了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>

...


...    

5 个答案:

答案 0 :(得分:2)

您需要将.find更改为.filter。这是因为.find搜索了所有元素的 children 后代,但由于你的html文件只是<div> s,你需要使用.filter来查找它们

DEMO:http://jsfiddle.net/zuPVp/

答案 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);