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

时间:2017-08-29 22:27:57

标签: css-selectors web-scripting

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

以下是指向所需名称的元素的链接: 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

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

1 个答案:

答案 0 :(得分:1)

你拥有的选择器几乎是正确的。

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

~+的工作方式不同,因为它会在选择器的第一部分之后选择任何匹配的元素,而+只会选择紧跟第一部分之后的元素选择器。 当然,通过"第一部分"我指的是a#followed_by+h4.li_group

我还更改了选择器以找到div.soda而不是div.odd,因此您可以获得所有相关元素,而不仅仅是奇数元素。

由于CSS选择器的工作方式,我们不能仅在edited_into"之前询问元素。但是,我们可以使用JavaScript解决此问题。

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

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