2017-01-12 21 views
0

テキストの文字列(名前など)をフィルタリングするための堅実な方法または最適な方法がありますか?私は.filter()で読んできましたが、実際にはその周りに頭を浮かべているようには見えません。jQueryで一致するテキスト文字列をフィルタリングして追加する

私は、最後、中、および名前の選択に基づいて縮小する必要がある名前のリストを持っています。ユーザーが姓を選択すると、名前の完全なリストは、姓に一致する名前のみを含むように更新されます。ミドルネームとラストネームと同じです。

enter image description here

(この例では、私は私のスクリプトは、「すべての結果」パネルおよびクローンからそれらの名前をつかむように、/最終的な検索セットにそれらを追加し、最後の名前として「ゴンザレス」を選択した)

私は、一致する名前を見つけてそれを完全なリストに複製することができましたが、最初の "Gonzalez"と一致するすべての名前が中間名と最後の名前を考慮していません私が望んでいないバリエーションが含まれています(De Gonzalesなど)。

$("a.forward").click(function(){ 
    if ($("#last-name").has(":contains('Gonzalez')").length) { 
     $("#final-list").find(":contains('Gonzalez')").clone(true).appendTo(".fullname"); 
    } 
}); 

私も、これは生産のために使用されることはありません原型であると期待される動作を実証することができることのために解決したいが、私はそれにアプローチする方法を見つけ出すことはできません。

答えて

1

要件を満たすためにコードを変更しました。基本的には、取得した要素にfind("Gonzalez")を使用してフィルタを適用し、Gonzalez,で始まることを確認しました。

編集:また、新しいものを追加する前に前の結果をクリアします。

姓をDe Gonzalezに変更し、対応する結果を得ることができます。

これは非常に良い方法ではありませんが、デモ用にはうまくいくはずです。

var lastName = "Gonzalez"; 
 

 
$("a.forward").click(function() { 
 
    // clear the previous results 
 
    $('.fullname').empty(); 
 

 
    // find and add new ones 
 
    if ($("#last-name").has(":contains('" + lastName + "')").length) { 
 
    $("#final-list").find(":contains('" + lastName + "')").filter(function(index, el) { 
 
     return $(el).text().startsWith(lastName + ","); 
 
    }).clone(true).appendTo(".fullname"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<a class="forward" href="#">Forward</a> 
 
<p>Lastname list</p> 
 
<ul id="last-name"> 
 
    <li>Gonzalez</li> 
 
    <li>Gonzalo</li> 
 
    <li>Gansalo</li> 
 
    <li>De Gonzalez</li> 
 
</ul> 
 
<p>Fullname list</p> 
 
<ul id="final-list"> 
 
    <li>Gonzalez, aaaaa</li> 
 
    <li>Gonzalez, bbbbb</li> 
 
    <li>Gonzalez, ccccc</li> 
 
    <li>Gonzalez, ddddd</li> 
 
    <li>De Gonzalez, aaaaa</li> 
 
    <li>De Gonzalez, bbbb</li> 
 
</ul> 
 

 
<p>Result</p> 
 
<ul class="fullname"> 
 
</ul>

+0

ありがとうございます!これはうまく機能していますが、2つの変数(たとえば "Anderson"と "Anders")を2つ設定すると、 "Anderson"を選択しても "Anders"の結果が返されます。これを防ぐ方法はありますか? – bcam7

+0

@ bcam7 "Anderson"または "Anders"をチェックしているので問題はありません。したがって、両方に一致することはできません。もう少し詳しく説明できますか? –

+0

「Anders」を選択すると、最終的なリストがAndersオプション(http://i.imgur.com/RFwmQtA.png)で更新されます。 "Anderson"を選択すると、最終的なリストがAndersとAnderson(http://i.imgur.com/PZMQG6k.png)のオプションで更新されます。それはそれぞれに2つの異なる変数が設定されています。 – bcam7

関連する問題