あなたのセレクタはほぼ正しいです。 +
のみセレクタの最初の部分の直後の要素を選択する一方、それは、セレクタの最初の部分の後に任意の整合素子を選択することで
a#followed_by+h4.li_group ~ div.soda a
~
は+
に異なる動作します。 もちろん、「最初の部分」では、私はa#followed_by+h4.li_group
を指しています。
div.odd
ではなくセレクタをdiv.soda
に変更して、奇妙なものではなくすべての関連要素を取得しました。
CSSセレクタの作業方法のため、私たちは「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'));
ありがとうございます。あなたのセレクターを使用して、私は部分的に私が望むタイトルの後にすべての名前を取得しています。しかし、私の意図は、タイトルの続きから始まり、 "edited_into"というタイトルが見つかるとすぐに停止するということです。さもなければ、それはそれらのすべてをつかむでしょう。おそらくあなたは私が上記の私の説明でそれを言及したことに気付かなかったでしょう。もう一度マイクに感謝します。 – SIM
ああ、もちろん - あなたは正しい、私はその部分を何とか見逃していた。私が何かを逃していない限り、これをCSSで純粋に行うことは実際には不可能です。 JSがうまくいっているとすれば、 "edited_into"セクションの後ろの最初の要素に遭遇した後、リストの処理を停止することができます。興味があれば、サンプルコードで回答を更新できます。 – mike
非常に興味があります。 Btw、私はあなたの答えを受け入れています。あなたが提供した部分を編集してくれることを願っています。 – SIM