2010-10-22 11 views
14

Ho installato WordPress e sto provando ad usare jQuery per creare un effetto Load More. Sto riscontrando dei problemi nell'utilizzo della funzione di caricamento di base per i frammenti di pagina. Non mi dispiace usare. Come ho visto alcuni thread qui a riguardo come una soluzione migliore.Posso aggiungere jQuery .load al posto di sostituire?

Ecco la mia struttura della pagina URL e il contenuto:

Prima Pagina: http://example.com/page/1/

Il codice HTML:

<div id="articles"> 
    <div class="story">blah blah blah</div> 
    <div class="story">blah blah blah</div> 
    <div class="story">blah blah blah</div> 
    <div class="story">blah blah blah</div> 
</div> 

seconda pagina: http://example.com/page/2/

Il codice HTML:

<div id="articles"> 
    <div class="story">blah blah blah</div> 
    <div class="story">blah blah blah</div> 
    <div class="story">blah blah blah</div> 
    <div class="story">blah blah blah</div> 
</div> 

Ho un link in fondo alla pagina e ho provato a fare il seguente:

jQuery(#articles).load('http://example.com/page/2/ #articles'); 

Purtroppo, ci sono 2 problemi. Innanzitutto, la funzione .load cattura lo #articles div e il suo contenuto dalla seconda pagina e lo inserisce nell'attuale #articles div. Ciò significa che, anche se ciò dovesse funzionare, ci sarebbero delle immersioni ricorsive all'interno dei div risultanti da ciascun clic. È solo disordinato.

Qualcuno potrebbe aiutarmi con il comando di aggiungere semplicemente .story classes dalla seconda pagina a #articles div nella prima pagina? Posso capire la logistica di automatizzarlo con variabili, loop e PHP per WordPress dopo. Ho solo bisogno di qualche assenso con lo script jQuery corretto.

P.S. Domanda bonus: se qualcuno sa se jQuery .load/.get danneggerà le pagine visualizzate, che è importante per chi ha entrate basate sulla pubblicità, per favore fatemelo sapere! Se ogni .load/.get conta come un altro successo per Google Analytics, siamo a posto!

Grazie!

+0

Non penso che $ .load() abbia effetto su Google Analytics. Per consentire a google di registrare una visualizzazione di pagina, la pagina effettiva deve essere caricata in modo da eseguire JavaScript di Google Analytics. Il google JavaScript viene eseguito quando una pagina viene caricata in una finestra del browser ma non quando stai recuperando il contenuto del file come con $ .load(). – quakkels

risposta

32

Non è possibile accodare il contenuto utilizzando il metodo jQuery.load(), ma si può fare ciò che si desidera utilizzare jQuery.get():

$.get('/page/2/', function(data){ 
    $(data).find("#articles .story").appendTo("#articles"); 
}); 
+0

Gabriel, grazie! Il tuo codice è stato molto facile da capire e ha funzionato subito.Sto usando il tuo codice insieme al concetto di Znarkus per l'importazione di contenitori per saltare al punto giusto. Solo cercando di capire come riscrivere i collegamenti temporaneamente, ogni aiuto sarebbe fantastico. Il problema è descritto sotto il commento di Znarkus sopra. –

+0

se si desidera filtrare il contenuto caricato get() non farà il lavoro. $ .load ('/ page/2/.posts'); ad esempio – keinabel

+0

Ho appena avuto un problema simile, e questo sembra funzionare ma mi dà un oggetto vuoto quando lo registro alla console per il debug. Nulla compare nemmeno sulla pagina. :( – maxxon15

4

probabilmente sarei fare in questo modo.

$('#articles').append($('<div/>', { id: '#articles-page2' }); 
$('#articles-page2').load('http://example.com/page/2/ #articles > *'); 

#articles > * recupera tutti i bambini immediate per #article.

+0

Hey Znarkus, potresti chiarire un po 'il codice? Avrò bisogno che PHP generi DIV denominati '# articles-page2',' # articles-page3', ecc.? –

+0

Sì. Ciò renderebbe anche più facile separare le pagine, utile per gestire correttamente la cronologia (premendo il pulsante Indietro nel browser). A questo punto è possibile caricare la pagina 'http: // example.com/page # articles-page3' e il browser scorrerà verso il basso a quel risultato imposta – Znarkus

+0

Ho capito che funziona con la tua idea e il codice di Gabriel in basso! Un'altra domanda leggermente correlata però. Ho 'Load More' Sto usando .attr per leggere il valore di quel link per afferrare la pagina successiva per '.load'. Voglio comunque che sia un link nel caso in cui JS sia disabilitato/non funzionante/SEO, ma come posso avere jQuery riscriverlo per scorrere al DIV # # articles-page2 'che verrebbe generato in linea per istanza? Grazie ancora! –

2

Per l'aggiunta di dati, non penso che si desideri utilizzare $ .load(). Invece, potresti voler usare $ .ajax().

$.ajax({ 
    url: 'yourlocation/test.html', 
    success: function(data) { 
    $('.result').html(data); 
    $("#yourdiv").append(data); 
    } 
}); 
2

Prova questo ha funzionato per me.

$('#articles').append($('<div/>').load('http://example.com/page/2/ #articles'));