2016-05-31 19 views
1

私はスクレーパーを構築していますが、いくつかのHTMLに出くわしました。どのように解析するのか分かりません。私はこのようなコードを持っています。 JSやjQueryのでSPANの横のDIV内のテキストを取得する方法

<div> 
    <span>SomeHeader</span> 
    "Some text" 

    <span>SomeOtherHeader</span> 
    "More text" 
</div> 

、私は「SomeHeader」を見つけたい、と「詳細テキスト」せずに、それの後に「Sometext」を探してください。

ご協力いただきましてありがとうございます。

+3

'$( 'divのスパン:含まれています(SomeHeaderが)')。取得(0を).nextSibling' – adeneo

答えて

1

セレクタ:contains()セレクタを使用すると、正確です。たとえば、$("span:contains(Text)")の場合は、両方のスパンを下に選択します。

<span>Text</span> 
<span>Text text</span> 

あなたは、要素を選択し、正確要素のテキストをチェックする.filter(function)メソッドを使用する必要があります。要素を選択したら、nextSiblingプロパティを使用して、要素の兄弟テキストを取得します。

var targetSpan = $("div > span").filter(function() { 
 
    return $(this).text() === "SomeHeader"; 
 
}); 
 
var text = targetSpan[0].nextSibling.nodeValue.trim(); 
 

 
console.log(text);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <span>SomeHeader</span> 
 
    "Some text" 
 
    <span>SomeOtherHeader</span> 
 
    "More text" 
 
</div>

1

DIV要素への参照を取得したら、その "textContent()"メソッドを使用してDIV要素とその子要素のすべてのテキストを抽出できます。それはあなたが探しているものの出現を見つけることの問題です。 "/ SomeHeader * /"、 "/ SomeOtherHeader /"のような正規表現を使用して、必要なものを抽出することができます。

1

あなたはこのような何かしてみてください可能性があります

$('div') 
    .contents() 
    .filter(function() { 
     if($(this).text() == "SomeHeader") { 
      alert($(this)[0].nextSibling.nodeValue); 
     } 
    }); 

例:https://jsfiddle.net/DinoMyte/bko2wsbu/1/

+0

あなたはこのコードで 'filter()'を嘲笑しました。 – Mohammad

関連する問題