2011-05-31 61 views
2

可以說我有這樣的:AJAX加載DIV ID的孩子

$('a').each(function() { 
    $(this).click(function(e) { 
     e.preventDefault(); 
     var href = $(this).attr('href'); 
     $('#somediv').load(href + ' #foo'); 
    }); 
}); 

現在我怎麼會讓它負荷#foo內的內容,而不是實際的div #foo

還是不太明白我的意思?

<div id="foo"> 
    <!-- Load these divs only --> 
    <div class="children">bar</div> 
    <div class="children">bar</div> 
    <div class="children">bar</div> 
    <div class="children">bar</div> 
    <div class="children">bar</div> 
    <!-- // --> 
</div> 

我想只加載div的內部內容。任何幫助是極大的讚賞!

編輯:解決

我用解包方法:

parent.load(href + ' #' + ident + '', function() { 
    $('#'+ident+' > div').children().unwrap(); 
}); 

回答

6

你可以做到這一點很容易,如果你不介意使用$.get和做手工裝載部分,像這樣的:

$.get(href, function(html) { 
    $('#somediv').html(
     $(html).find('#foo').html() 
    ); 
}); 

這抓住HTML的完整塊從href使用$.get,然後在成功回調中,我們在整個HTML堆中找到id="foo"元素,使用.html()提取其內容,然後使用.html()的增變形式將東西複製到#somediv中。

如果你知道#foo將只包含<div>孩子,那麼你可以試試這個:

$('#somediv').load(href + ' #foo > div'); 

我不能肯定,這將工作和我沒有一個像樣的測試情況下成立,但.load documentation表示它應該工作。如果#foo不包含<div> s,那麼您必須拿出其他東西來與child selector (>)一起使用。當然,如果#foo包含未包含在元素中的文本,那麼我認爲您堅持上面的$.get方法。

+0

你的答案是比我更好的解決方案笑。謝謝! – daryl 2011-05-31 06:18:11

+0

@tfbox:很酷,謝謝。你可以檢查子選擇器是否與'.load'一起工作? '$ .get'方法雖然可能更安全,更有前途。 – 2011-05-31 06:20:22

+0

我沒有測試過,但我想不出爲什麼它不會。 – daryl 2011-05-31 07:23:29

-1

你可以試試這個:

$(this).click(function(e) { 
    e.preventDefault(); 
    var href = $(this).attr('href'); 
    $('#somediv').load(href + '#foo *', 
    function() { 
     $('#somediv #foo').remove(); 
    }); 
}); 
+0

但是'*'通過整個子樹下降(參見http://jsfiddle.net/ambiguous/SdC5n/1/)而不是一個級別,這樣可能會造成一些混亂,它也不會捕獲頂部級別的文本節點。 – 2011-05-31 06:24:56

+0

@mu太短感謝您的建設性意見。我是一名初學者,所以我需要更多地瞭解這種建議,現在和將來都會有這樣的建議。再次感謝。繼續幫助..請 – thecodeparadox 2011-05-31 06:30:15