2011-12-05 3 views
0

私は開発中のサイトのウィジェット内で簡単なjqueryライブ検索機能を設計しています。私が見つけたいくつかのコードを借りて、それは素晴らしい仕事です。あなたは、私が検索するテキストはpタグである見ることができるように私は基本的なデータセットのjqueryライブ検索機能を作成しようといくつかの問題がありますか?

<ul> 
<li> 
<a href="#"> 
<div class="something> 
<img src="something.jpg"> 
<p>Searchable Item 1</p> 
</div> 
</a> 
</li> 
etc. 

:私はこのようなリストを使用しています

<ul> 
    <li>Searchable Item 1</li> 
    <li>Searchable Item 2</li> 
etc 

:問題ではなく、このようなリストを使用してのそれにもかかわらずであります。私が使った関数は、他のすべてのもの(a href、div、img)とそれらのタグにあるテキストとpタグ内の項目を検索することです。申し訳ありませんが、私の説明が少し混乱するかもしれませんが、私はここにあなたのコードの例を示します場合:

//includes im using 
<script type="text/javascript" src="js/jquery-1.7.min.js" ></script> 
<script type="text/javascript" src="js/quicksilver.js"></script> 
<script type="text/javascript" src="js/jquery.livesearch.js"></script> 



//document ready function 
$(document).ready(function() { 
$('#q').liveUpdate('#share_list').fo… 
}); 



//actual search text input field 
<input class="textInput" name="q" id="q" type="text" /> 



//part of the <ul> that is being searched 
<ul id="share_list"> 
<li> 
<a href="#"> 
<div class="element"><img src="images/social/propellercom_icon.jpg… /> 
<p>propeller</p> 
</div> 
</a> 
</li> 


<li> 
<a href="#"> 
<div class="element"><img src="images/social/diggcom_icon.jpg" /> 
<p>Digg</p> 
</div> 
</a> 
</li> 


<li> 
<a href="#"> 
<div class="element"><img src="images/social/delicios_icon.jpg" /> 
<p>delicious</p> 
</div> 
</a> 
</li> 
</ul> 

もここで私は、私は信じてい

jQuery.fn.liveUpdate = function(list){ 
list = jQuery(list); 

if (list.length) { 

var rows = list.children('li'), 
cache = rows.map(function(){ 
return this.innerHTML.toLowerCase(); 
}); 


this 
.keyup(filter).keyup() 
.parents('form').submit(function(){ 
return false; 
}); 
} 

return this; 

function filter(){ 
var term = jQuery.trim(jQuery(this).val().toLowerCase()), scores = []; 

if (!term) { 
rows.show(); 
} else { 
rows.hide(); 

cache.each(function(i){ 
var score = this.score(term); 
if (score > 0) { scores.push([score, i]); } 
}); 

jQuery.each(scores.sort(function(a, b){return b[0] - a[0];}), function(){ 
jQuery(rows[ this[1] ]).show(); 
}); 
} 
} 
}; 

を使用していますjquery.livesearch.jsファイルがあります問題はここにある:

var rows = list.children('li'), 
cache = rows.map(function(){ 
return this.innerHTML.toLowerCase(); 
}); 

ちょうどそれがテキスト入力フィールドに入力した文字列と比較するために、検索語としてのliタグの間に見つけたものは何でも利用しています。検索機能は実際には機能しますが、あまりにも多くの一致を見つけたようで、スコアに似た用語に一致するquicksilver.js検索機能を使用しているため、特定ではありません。 liリスト(href、img、divなど)から他のものをすべて削除すると、検索機能が完全に機能します。もし誰かがこれに対する解決策を持っているなら、私は本当に素晴らしいと思います。

return this.children( 'p')。innerHTMLしかし、うまくいきません、PHP、C++、 C#などが、JavaScriptやJqueryではまったく役に立たず、私にとっては外国語のようです! livesearchプラグインは、あなたのリストに段落タグを検索しますので、これはそれをする必要があり

var rows = list.children('li').find('p'), 

:で

var rows = list.children('li'), 

:私はあなたがこの行を置き換えることができると信じてjquery.livesearch.jsファイルで

答えて

1

あなたは、あなたが今、子供に<p>要素選択されているので、あなたが親<li>要素を表示しようとしていることを反映して.show()/.hide()行を変更する必要があります。

変更:

rows.show();//1 
rows.hide();//2 
jQuery(rows[ this[1] ]).show();//3 

への:

rows.parents('li:first').show();//1 
rows.parents('li:first').hide();//2 
jQuery(rows[ this[1] ]).parents('li').show();//3 
+0

まずは迅速な返信に感謝します。私は本当に素晴らしいです。あなたが書いたものは完全に論理的なようですので、jquery.livesearch.jsファイルをそれに応じて編集しましたが、今では関数が全く機能しません。奇妙なことに、私が検索ボックスに何かを入力するたびに、最初のli要素が消えますが、何を入力しても何もしません。 – user1082484

+0

こんにちは、文字通りコピーして、あなたが私のコードに変更すると言った内容を貼り付けましたが、それと同じ問題です。とにかくお試しいただきありがとうございます。私はまだ本当に感謝しています。害虫になりたくないので、私は試し続けなければならない。しかし、ありがとう。 p.s.私が作っているウィジェット全体のコードはhttp://www.alvuk.com/widget_test1.html(オリジナル)とhttp://www.alvuk.com/widget_test2.html(あなたが提案した変更を加えたもの)です。ありがとう。 – user1082484

+0

最後にそれを働かせました。 liを単に置き換えた:まずはliだけ。最初の要素は常にulの最初の要素に向かっていました。私が使用しているjqueryのバージョンではちょっと変わったかもしれません。ジャスパーの助けをありがとう! – user1082484

関連する問題