1

私はここで奇妙なことをしています。よろしければ助けてください。次のようなレポートを含む Web ページがあります。

</p></li><li>ARTICLE 1 (NAME 1)<br /><p>    
<div class="list">
Nothing found. 
</div>
</p></li><li>ARTICLE 2 (NAME 2)<br /><p>    

<div class="list">
<h4 class="sub-heading">Items:</h4>  
<li class="item">
...
</li>
<li class="item">
...
</li>

</div>

これがページ全体で繰り返されます。記事 X は常に一意ですが、名前 X は複数の記事の近くで同じ場合があります。p 要素は私が挿入したもので、変更できます (css は変更できません)。div は、私の手の届かないところにあるプラグインの出力です。プラグインはいくつかのデータベースを検索し、「何も見つかりません」を返すか、見つかったアイテムを一覧表示します。すべての可能な名前 X がリストされ、デフォルトで各名前が 0 であるテーブルが同じページにあるはずです。私が達成したいのは、名前 X をカウントし、記事の p に続く要素に「何も見つからない」場合にのみ、名前の近くのカウンターを増やすことです。つまり、上記の例では、テーブルは次のようになります

 Name 1     1

 Name 2     0

次の ARTICLE X の後のページで同じ名前 X が見つかり、次の要素に「nothing found」がある場合とない場合があります。「何も見つからない」場合にのみカウンターを増やすというルールを適用する必要があります。私の最初のアイデアは、すべての要素を非表示にして、下の要素に「何も見つからない」という ARTICLE X のリストだけを残すことでした。私はそれを行い、次のコードを使用してカウントしました。

  var n = $("li:contains('Name 1')").length;
  $("span").text("There are " + n)

これは非常に多くのレベルで間違っています。まず、すべての要素が隠されていても存在するソースコードを読み取ります。また、ページに存在するすべてのスパン要素のテキストを明らかに置き換えます (.text の説明からスパンを取得しました)。ページ レイアウトを制御できないため、出力を挿入する方法がよくわかりません。どんなアイデアでも大歓迎です。ありがとう。

4

2 に答える 2

3

NAME 1最初に を含む要素を選択し、次に を含む子要素があるかどうかを確認することで、カウントを取得できますNothing found

$('li:contains("NAME 1")').children('.list:contains("Nothing found")').length;

要素を作成して DOM に挿入する方法については、こちらのドキュメントを参照してください。

この fiddleもご覧ください。これは、あなたが達成しようとしていることの本当に基本的な例です。

于 2012-11-07T09:33:29.533 に答える
0

私があなたを理解しているなら、このスニペットを試してください:

var counter = 0;

$('li').each(function(){
     if($(this).html().indexOf('Name 1')> -1)
         if($(this).next('div.list').html() === "Nothing found.")
             {++counter}
});
于 2012-11-07T09:14:24.877 に答える