2017-03-04 66 views
0

目前我有一個函數可以根據輸入過濾我的列表,但它只會嘗試與第一個字母匹配,而不是在任何地方查找輸入文本。例如,我的意思是當用戶鍵入「Eng」時,它將與「England」匹配,並刪除其他人,這很好,但是如果用戶輸入「land」,則不會顯示匹配的所有國家/地區名單中有「土地」的名單。在任何地方包含搜索詞的過濾器元素

$(function() { 
    $("input").keyup(function() { 
     var val = $(this).val(); 
     $("ul li").show().filter(function() { 
      return $(this).text().toLowerCase().trim().indexOf(val); 
     }).hide(); 
    }); 
}); 

JSFiddle顯示什麼我目前使用:

+2

只需添加['=== -1'(https://jsfiddle.net/w7hb44w0/ 1 /)在'filter()'條件下。 – Tushar

回答

1

嘗試是這樣的

$(function() { 
    $("input").keyup(function() { 
    var val = $(this).val(); 
    $("ul li").show().filter(function() { 
     if($(this).text().toLowerCase().trim().indexOf(val) > -1){ 
      return 0; 
     } 
     return 1; 
    }).hide(); 
    }); 
}); 

https://jsfiddle.net/zwLsackq/1/

0

如果您正在使用再取:contains優勢。該方法將返回包含所有匹配元素的jQuery對象。

$(function() { 
 
    $("input").keyup(function() { 
 
    var val = $(this).val(); 
 
    $("ul > li").hide(); 
 
    $("ul > li:contains('" + val + "')").show(); 
 
    }); 
 
});
input { 
 
    padding: 5px; 
 
    margin: 0 5px; 
 
} 
 

 
ul { 
 
    margin: 10px 0 0; 
 
} 
 

 
li { 
 
    display: none; 
 
}
<script src="https://code.jquery.com/jquery-2.2.4.js"></script> 
 
<input type="text" id="inp" /> 
 
<ul> 
 
    <li>England</li> 
 
    <li>Wales</li> 
 
    <li>Scotland</li> 
 
    <li>Ireland</li> 
 
</ul>

相關問題