2011-01-31 13 views
1

私は検索ボックスを持っています。私は繰り返しdivをフィルタリングするためにjQueryとkeyupを使用しています。jQuery - using:ネストされたdiv /クラスを含む即時検索のためのcontains?

各div要素は次のようになります。

<div class="searchCell" id="searchCell' . $id . '">'; 
    <div class="friendName"> 
     // someNameOutputWithPHP. 
     </div> 
</div> 

を今、私は名前のテキストに基づいてフィルタリングします。 someNameOutputWithPHPに検索クエリが含まれている場合、searchCell全体が表示されます()。そうでない場合は、searchCell全体をhide()する必要があります。

これは、しかし、動作しません:

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#searchbox").keyup(function() { 
     var searchValue = $(this).val(); 
     if(searchValue === "") { 
      $(".searchCell").show(); 
      return; 
     } 
     $(".searchCell").hide(); 
     $(".searchCell > .friendName:contains(" + searchValue + ")").show(); 
    }); 
}); 
</script> 


EDIT

新しい問題を:私は私が望むどのように表示するdiv要素のショーを()です。しかし:containsは正しく動作していません。

たとえば、名前の1つがRyanです。私が「Ryan」を検索すると、何も得られません。しかし、私は 'ヤン'を検索するときに私はライアンのdivを取得します。

何が問題なのですか。

がここにあります:

 $(".friendName:contains(" + searchValue + ")").parent().show(); 
+0

サイドノート: 'keyup'はおそらくあなたが望むイベントではありません。キーリピート(キーを押して保持するなど)ではなく、キーアップ時にのみ起動します。 'keypress'を使うかもしれませんが、それは人のバックスペーシングを捕まえたり、マウスでフィールドに貼り付けることはありません(右クリックし、ほとんどのOSのメニューから" Paste "を選択します)。残念ながら、フィールドの変更を検出する唯一の*信頼できる方法は、それをポーリングすることです( 'focus'をポーリングし、' blur 'を止めて、あなたが不必要にポーリングしないようにしてください)。 –

+0

さて、私の編集で検索の問題を解決するために使用できるワイルドカードのいくつかの並べ替えはありますか? –

答えて

1

あなたが.searchCellを隠し、その後、しかし親が隠されているので、表示プロパティが表示されません取得し、その子.friendName divを、示しているためである:コードが含まれています。

はこれを試してみてください:

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#searchbox").keyup(function() { 
     var searchValue = $(this).val(); 
     if(searchValue === "") { 
      $(".searchCell").show(); 
      return; 
     } 
     $(".searchCell").hide(); 
     //$(".searchCell:has(.friendName:contains(" + searchValue + "))").show(); 
     // OR 
     //$(".friendName:contains(" + searchValue + ")").parents(".searchCell").show(); 
     // OR 
      $(".friendName:contains(" + searchValue + ")").parent().show(); // If .searchCell is always a direct parent 
    }); 
}); 
</script> 
+0

は、( ':has()' + '':contains() 'を擬似的に使っています。 OPは、現在のステートメントで '.show()'の前に '.parent()'を呼び出し、うまくいくはずです。 – jAndy

+0

これはうまくいきません。 –

+0

以前に入力ミスがありました。それを修正しました(それはコメントしました)。また、階層をナビゲートする他の方法も追加しました。 – Chandu

0

あなたのセレクタ

$(".searchCell > .friendName:contains(" + searchValue + ")") 

searchValueからテキストを含むすべての.friendName divを選択します。それはうまく動作しますが、親要素である.show()が必要です。

$(".searchCell > .friendName:contains(" + searchValue + ")").parent().show(); 

デモhttp://jsfiddle.net/d3ays/3/

ところで、あなたのHTMLマークアップがあまりにも台無しに見えるだけで、そのための.parent()メソッドを呼び出します。たとえば、div.searchCellの背後には;があります。

関連する問題