无法创建适当的选择器来获取名称

Can't create appropriate selector to grab names

如何从以下元素中获取 "Followed by" 类别下的所有名称。名字的排列方式对我来说有点陌生,这就是为什么我不能得到所有的名字。我已经使用了一个能够获取第一个的选择器。但是,我希望所有名称都在 "Followed by" 标题下,直到 "edited_into" 标题。提前致谢。

这是一个 link 元素,其中所需的名称是: https://www.dropbox.com/s/nzmvfc75szlgyyn/elements%20for%20expression.txt?dl=0

我试过的选择器:

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

我得到的结果只是名字:

Star Trek V: The Final Frontier

顺便说一句,我的唯一目的是使用此选择器解析名称而不是样式。

你的select几乎是正确的。

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

~+ 的工作方式不同,它会 select 在 selector 的第一部分之后的任何匹配元素,而 + 将仅紧跟在 selector 的第一部分之后的 select 个元素。 当然,"first part"我指的是a#followed_by+h4.li_group

我还更改了 selector 以查找 div.soda 而不是 div.odd,因此您可以获得所有相关元素,而不仅仅是奇怪的元素。


由于 CSS select 或工作方式,我们无法请求 "only elements up until edited_into"。但是,我们可以使用 JavaScript.

来解决这个问题

带有条件 break 的简单 for 循环将是最简单的方法。

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'));