2017-08-29 5 views
0

"Followed"カテゴリのすべての名前を以下の要素から取得する方法を教えてください。名前がどのようにレイアウトされているかは、私にとっては異質なので、私はそれらのすべてを得ることができません。私はすでに最初のものをつかむことができるセレクタを使用しています。しかし、私は、 "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 

Btw私の唯一の意図は、このセレクタを使用してスタイルを設定しないで名前を解析することです。

答えて

1

あなたのセレクタはほぼ正しいです。 +のみセレクタの最初の部分の直後の要素を選択する一方、それは、セレクタの最初の部分の後に任意の整合素子を選択することで

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

ありがとうございます。あなたのセレクターを使用して、私は部分的に私が望むタイトルの後にすべての名前を取得しています。しかし、私の意図は、タイトルの続きから始まり、 "edited_into"というタイトルが見つかるとすぐに停止するということです。さもなければ、それはそれらのすべてをつかむでしょう。おそらくあなたは私が上記の私の説明でそれを言及したことに気付かなかったでしょう。もう一度マイクに感謝します。 – SIM

+0

ああ、もちろん - あなたは正しい、私はその部分を何とか見逃していた。私が何かを逃していない限り、これをCSSで純粋に行うことは実際には不可能です。 JSがうまくいっているとすれば、 "edited_into"セクションの後ろの最初の要素に遭遇した後、リストの処理を停止することができます。興味があれば、サンプルコードで回答を更新できます。 – mike

+0

非常に興味があります。 Btw、私はあなたの答えを受け入れています。あなたが提供した部分を編集してくれることを願っています。 – SIM

関連する問題