2012-05-14 24 views
2

我想循環通過加載了ajax的文件,但它不會循環,我已經嘗試了幾件事情,但我不能讓它工作。jquery 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

在控制檯中的任何錯誤?如果Starx建議沒有幫助的話,可以使用jsfiddle演示來檢查它。 –

+0

不,我沒有得到任何錯誤,會很好做,比我知道去哪裏;) – user759235

回答

2

您需要更改.find.filter。這是因爲.find搜索 所有元素的後代,但由於您的html文件只是<div> s,您需要使用.filter來查找它們。

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

+0

是的你是對的,找到就是去尋找兒童,我是多麼的愚蠢。謝謝!! – user759235

+0

不客氣:-) –

+0

從技術上說,它搜索所有的後代,不僅是孩子,也是兒童的孩子。 –

1

你不需要指定html的數據類型,並不需要它。

SO,刪除以下行。

dataType: "html" 
+0

這是完全有效的,事實上,如果你要返回HTML,你應該使用它。 –

+0

如果您刪除dataType,它將不起作用,因爲默認情況下,dataType將嘗試猜出它是什麼。 – user759235

+0

@ user759235,實際上不是,當你以'$(data)'的形式傳遞數據時,它會立即成爲一個jQuery對象。 – Starx

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') 
    }       
}); 
+0

'$('div',data)'*完全*與$(data).find('div')'相同。 –

+0

@火箭 - 哦,忘了一些東西! – adeneo

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') 
     }       
    }); 
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); 
+1

這是不正確的,查找不起作用,因爲它們不是子孫,不是因爲它們不在DOM中。 –

+0

這裏有一個小提琴演示這個http://jsfiddle.net/cVpuF/1/ –

+0

@Interstellar_Coder感謝您的輸入,我已經更新了答案。 – jbabey