2010-11-15 3 views
2

Nous devons récupérer le corps des articles de blog pour notre système (c'est légitime, je le jure - nous avons un blog de formation et nous voulons afficher le contenu dans les boîtes de dialogue système). Les blogs sont écrits sur une plate-forme 3 du parti qui produit HTML comme ceci:Récupérer du code HTML à partir d'un div en excluant les autres divs avec jQuery

<div class="post"> 
    <h3 class="title">Title content</h3> 

    <div class="byline"> 
     Byline content 
    </div> 

    <div class="submissions"> 
     Submission content 
    </div> 

    <div class="buttons"> 
    </div> 

    <p>Post body part 1</p> 
    some more post body not in a tag, however the user enters it 
    <p>Even more post body</p> 

    <div class="tags"> 
     Tag content 
    </div>  
</div> 

Je suis en train d'obtenir tout le contenu HTML à l'intérieur du div poste, mais à l'exclusion du titre, la signature, les soumissions, les boutons et les balises sections.

Si je lance cette jQuery:

$(".post").not(".title").not(".byline").not(".submissions").not(".buttons").not(".tags").html() 

Je reviens tout le contenu de la div poste, y compris les en-têtes indésirables/divs. J'ai essayé diverses incantations de non, y compris: pas, et googler jusqu'à ce que mes yeux me fassent mal, en vain.

Des idées? On dirait que ça devrait être assez facile, alors je devine qu'il me manque quelque chose? Merci!

Répondre

2

Essayez d'utiliser la méthode de recherche avec: pas comme si

$('div.post').find(":not(.title,.byline,.submissions,.buttons,.tags)"); 

Saison au goût.

L'autre option est de simplement masquer les éléments indésirables:

$('div.post').find('.title, .byline, .submissions, .buttons, .tags').hide(); 
+0

C'est beaucoup mieux que ma solution. :) – clifgriffin

1

Vous devriez être en mesure d'isoler ce texte en utilisant la méthode children() avec un sélecteur :not

$(".post").children(":not(.title,.byline,.submissions,.buttons,.tags)"); 

http://api.jquery.com/children/

ou d'isoler totalement le contenu que vous voulez, vous pouvez écrire:

var $cleansed = $(".post").clone(); 
$cleansed.find(".title,.byline,.submissions,.buttons,.tags").remove(); 

// append() or $cleansed.html() this content somewhere 
+0

Cela ne fonctionne pas. – clifgriffin

+0

Cela ne renverra que le contenu du premier enfant, non? –

+0

tout le texte requis ne fait pas partie d'un paragraphe – NimChimpsky

2

Vous utilisez des sélecteurs de manière incorrecte. Une fois qu'il trouvera $ (". Post"), il ne cherchera pas à l'intérieur pour exclure le contenu de cette div. $ (". post") correspond exactement au sélecteur en n'étant pas title, byline, submission, ad infinitum.

Je vous suggère de cibler ces autres classes pour les supprimer, puis d'utiliser html() ou .post.

Avez-vous du sens?

EDIT: (S'il vous plaît ne me vote pas vers le bas sans essayer ma méthode ... ce n'est pas grande, mais cela fonctionne)

$(".title").remove(); 
$(".byline").remove(); 
$(".submissions").remove(); 
$(".buttons").remove(); 
$(".tags").remove(); 
alert($(".post").html()); 
+0

vous pourriez tout aussi bien faire '$ (". Post "). Find (". Titre, .byline, .submissions, .buttons, .tags "). Remove();' – hunter

+0

Ouais, j'étais dans un course pour racheter ma réputation :) – clifgriffin

Questions connexes