2010-10-22 5 views
14

J'ai une installation WordPress et j'essaie d'utiliser jQuery pour créer un effet Load More. J'ai des problèmes pour utiliser la fonctionnalité .load de base pour les fragments de page. Cela ne me dérange pas d'utiliser .get comme je l'ai vu des discussions ici en ce qui concerne cela comme une meilleure solution.Peut jQuery .load ajouter au lieu de remplacer?

Voilà ma structure d'URL de la page et le contenu:

Première page: http://example.com/page/1/

Le code 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> 

Deuxième Page: http://example.com/page/2/

Le code 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> 

J'ai un lien en bas de la page et je l'ai essayé de faire ce qui suit:

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

Malheureusement, il y a 2 problèmes. D'abord, la fonction .load saisit le #articles div et son contenu à partir de la deuxième page et le place dans le #articles div existant. Cela signifie que même si cela fonctionnait, il y aurait des divs récursifs dans les divs résultant de chaque clic. C'est juste en désordre.

Est-ce que quelqu'un pourrait m'aider avec la commande pour ajouter simplement le .story classes de la deuxième page dans le #articles div sur la première page? Je peux comprendre la logistique de l'automatisation avec des variables, des boucles, et PHP pour WordPress après. Juste besoin d'aide avec le script jQuery approprié.

P.S. Question bonus: Si quelqu'un sait si jQuery .load/.get nuira aux pages vues, ce qui est important pour ceux qui ont des revenus basés sur la publicité, s'il vous plaît faites le moi savoir! Si chaque .load/.get est un autre succès pour Google Analytics, nous sommes bons!

Merci!

+0

Je ne pense pas que $ .load() affectera google analytics. Pour que google puisse enregistrer une page vue, la page doit être chargée de telle sorte que le JavaScript de google analytics soit exécuté. Le google JavaScript est exécuté lorsqu'une page est chargée dans une fenêtre de navigateur, mais pas lorsque vous récupérez simplement le contenu du fichier comme dans le cas de $ .load(). – quakkels

Répondre

32

Vous ne pouvez pas ajouter du contenu en utilisant la méthode jQuery.load(), mais vous pouvez faire ce que vous voulez en utilisant jQuery.get():

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

Gabriel, merci! Votre code était très facile à comprendre et a fonctionné dès le départ.J'utilise votre code avec le concept de Znarkus pour importer des conteneurs pour aller au bon endroit. Juste essayer de comprendre comment réécrire les liens temporairement, toute aide serait génial. Le problème est décrit dans le commentaire de Znarkus ci-dessus. –

+0

si vous voulez filtrer le contenu chargé, get() ne fera pas le travail. $ .load ('/ page/2/.posts'); par exemple – keinabel

+0

J'ai juste eu un problème semblable, et cela semble fonctionner mais me donne un objet vide quand je le connecte à la console pour le débogage. Rien ne vient non plus sur la page. :( – maxxon15

4

Je ferais probablement comme ça.

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

#articles > * récupère tous les enfants immédiats à #article.

+0

Hey Znarkus, pourriez-vous clarifier un peu plus le code? Aurais-je besoin que PHP génère des DIVs nommés '# articles-page2',' # articles-page3', etc.? –

+0

Oui. plus facile à séparer les pages, utile pour gérer correctement l'historique (utilisateur en appuyant sur le bouton de retour dans le navigateur) .Vous pourriez alors simplement charger la page 'http: // example.com/page # articles-page3' et le navigateur défilerait vers le bas à ce jeu de résultats – Znarkus

+0

Je l'ai eu en travaillant avec votre idée et le code de Gabriel ci-dessous! Une autre question légèrement liée, j'ai 'Load More' J'utilise .attr pour lire la valeur de ce lien pour récupérer la page suivante Je veux toujours que ce soit un lien dans le cas où JS est désactivé/ne fonctionne pas/SEO, mais comment puis-je le réécrire jQuery pour le faire défiler vers la DIV '# articles-page2' qui serait générée en ligne pour instance? Merci encore –

2

Pour l'ajout de données, je ne pense pas que vous souhaitiez utiliser $ .load(). Au lieu de cela, vous pourriez vouloir utiliser $ .ajax().

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

Essayez ceci cela a fonctionné pour moi.

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