2017-08-29 2 views
0

Comment puis-je saisir tous les noms sous la catégorie "Suivi par" à partir des éléments ci-dessous. La façon dont le nom a été présenté est un peu étranger à moi, c'est pourquoi je ne peux pas tous les avoir. J'ai déjà utilisé un sélecteur qui est capable de saisir le premier. Cependant, je m'attends à avoir tous les noms sous le titre "Suivi par" et jusqu'au titre "edit_into". Merci d'avance.Impossible de créer un sélecteur approprié pour saisir les noms

Voici un lien vers les éléments dans lequel les noms sont: https://www.dropbox.com/s/nzmvfc75szlgyyn/elements%20for%20expression.txt?dl=0

Le sélecteur j'ai essayé avec:

a#followed_by+h4.li_group+div.odd a 

Le résultat que je vais avoir est que le premier nom :

Star Trek V: The Final Frontier 

Btw, ma seule intention est d'analyser les noms en utilisant ce sélecteur pour ne pas styler.

Répondre

1

Le sélecteur que vous avez est presque correct.

a#followed_by+h4.li_group ~ div.soda a 

Les ~ fonctionne différemment à la + en ce qu 'il sélectionne un élément d'adaptation après la première partie du sélecteur, tandis que le + sélectionne uniquement les éléments qui suit immédiatement la première partie du sélecteur. Bien sûr, par "première partie" je fais référence à a#followed_by+h4.li_group.

J'ai aussi changé le sélecteur pour trouver div.soda plutôt que div.odd ainsi vous obtenez tous les éléments pertinents, plutôt que les impairs.


En raison des sélecteurs CSS façon de travailler, nous ne pouvons pas demander des « éléments seulement jusqu'à edited_into ». Nous pouvons cependant résoudre cela en utilisant JavaScript.

Une boucle for simple avec un break conditionnel sera la méthode la plus simple.

var titles = []; 
var items = document.querySelectorAll('a#followed_by+h4.li_group ~ div.soda a'); 
//firstEditedIntoItem represents the first element in 
//the `edited_into` section. If it's null, then there 
//is none, and we have nothing to worry about. 
var firstEditedIntoItem = 
    document.querySelector 
    ('a#edited_into+h4.li_group+div.soda a, a#spin_off_from+h4.li_group+div.soda a'); 
    // Note: This selector will find the first instance that matches any of the 
    // specified sections. You could add another and replace `spin_off_from` with 
    // another section id. 
for(var i=0; i<items.length; i++) { 
    var it = items[i]; 
    //don't accept elements after 'edited_into' 
    // If firstEditedIntoItem is null, it will not match either. 
    if(it==firstEditedIntoItem) break; 
    titles.push(it.textContent); 
} 
console.info(titles.join('\n')); 
+0

Merci pour votre solution. En utilisant votre sélecteur, je reçois tous les noms après "suivi par" titre qui est en partie ce que je veux. Cependant, mon intention est de commencer par suivi du titre mais s'arrête dès qu'il trouve le titre "edit_into". Sinon, il va tous les attraper. Peut-être que vous n'avez pas remarqué que je l'ai également mentionné dans ma description ci-dessus. Merci encore Mike. – SIM

+0

Oh, bien sûr - vous avez raison, j'ai raté cette partie, en quelque sorte. Ce n'est pas vraiment possible de le faire uniquement avec CSS - à moins que je ne manque quelque chose. En supposant que JS soit correct, vous pouvez arrêter le traitement de la liste après avoir rencontré le premier élément après la section "edited_into". Je peux mettre à jour la réponse avec un exemple de code si vous êtes intéressé. – mike

+0

Très intéressé. Btw, j'accepte votre réponse. J'espère que vous modifierez la partie que vous avez offerte. – SIM